各種排序時間空間複雜度穩定性分析

2021-06-28 11:34:37 字數 2728 閱讀 5604

下面是常見排序演算法的速度比較:(從慢到快)

1、氣泡排序o(n^2)

2、簡單選擇排序o(n^2)

3、直接插入排序o(n^2)

4、折半插入排序o(n^2)

5、希爾排序,近似為o(n^1.25)     (尚無定論,但可以確定是n~n^2之間的多項式時間複雜度)

6、堆排序o(nlogn)

7、歸併排序o(nlogn)

8、快速排序o(nlogn)

一般來說是快排最快的。但是也有例外!

6,7都是效能穩定的演算法,這個複雜度就是它們的最壞時間複雜度,而快排的複雜度只是平均時間複雜度。快排的最差時間複雜度為o(n^2),最壞情況出現在陣列已經完全有序不必再排列時。

因此,最快的是歸併排序。其次是堆排序(歸併和堆排序的複雜度相同,區別只是大o記號前面的常數因子不同而已)。冒泡本身就是乙個很慢的演算法,此時冒泡和快排的效能應該差不多其實,不大好比較,總之肯定是他們兩個最慢。

(p.s.另附:直接插入排序的時間複雜度為o(n^2),但是當資料有序時,執行效率最好,此時的時間複雜度為o(n)。也就是說,在你所說的陣列遞增有序的前提下,直接插入排序最快!)

選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將l[i..n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。 

插入排序的基本思想是,經過i-1遍處理後,l[1..i-1]己排好序。第i遍處理僅將l[i]插入l[1..i-1]的適當位置,使得l[1..i]又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。首先比較l[i]和l[i-1],如果l[i-1]≤l[i],則l[1..i]已排好序,第i遍處理就結束了;否則交換l[i]與l[i-1]的位置,繼續比較l[i-1]和l[i-2],直到找到某乙個位置j(1≤j≤i-1),使得l[j]≤l[j+1]時為止。圖1演示了對4個元素進行插入排序的過程,共需要(a),(b),(c)三次插入。

氣泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個「氣泡」序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。 

堆排序是一種樹形選擇排序,在排序過程中,將a[n]看成是完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇最小的元素。 

設有兩個有序(公升序)序列儲存在同一陣列中相鄰的位置上,不妨設為a[l..m],a[m+1..h],將它們歸併為乙個有序數列,並儲存在a[l..h]。 

快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃瞄只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。快速排序通過一趟掃瞄,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。

在直接插入排序演算法中,每次插入乙個數,使有序序列只增加1個節點,並且對插入下乙個數沒有提供任何幫助。如果比較相隔較遠距離(稱為增量)的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除多個元素交換。d.l.shell於2023年在以他名字命名的排序演算法中實現了這一思想。演算法先將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,然後再用乙個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。

時間複雜度

空間複雜度

穩定性

插入排序

o(n2)

1

希爾排序

o(n2)

1

×

氣泡排序

o(n2)

1

選擇排序

o(n2)

1

×

快速排序

o(nlogn)

o(logn)

×

堆排序

o(nlogn)

1

×

歸併排序

o(nlogn)

o(n)

排序演算法時間複雜度 空間複雜度 穩定性整理

涉及排序演算法包括 簡單選擇排序 直接插入排序 希爾排序 歸併排序 氣泡排序 快速排序 堆排序 基數排序 時間複雜度 快些以nlogn的速度歸隊 此句表示時間複雜度為o nlogn 的排序,快 表示快速排序,些 表示希爾排序,歸 表示歸併排序,隊 表示堆排序,其他排序均為o n 特殊的基數排序為o ...

各種排序演算法時間複雜度及穩定性

如下表 每次將乙個待排序的資料,跟前面已經有序的序列的數字一一比較找到自己合適的位置,插入到序列中,直到全部資料插入完成。先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素...

常用排序演算法時間複雜度 空間複雜度 穩定性比較

最近在準備秋招的期間遇到了很多排序演算法時間複雜度 空間複雜度 穩定性相關的題目,那就做個大致的總結吧。排序演算法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性直接插入排序 o n o n o n o 1 穩定希爾排序 o nlog2n o n o n o 1 不穩定直接...