八大排序算法的時間、空間復雜度和穩定性


八大排序算法的時間、空間復雜度和穩定性

❀八大排序算法對應的文章:

八大排序算法之直接插入排序(教你用生活的想象,讀懂插入算法)

八大排序算法~希爾排序【改良版的直接插入排序】

八大排序算法~冒泡排序【加變量flag的作用】

八大排序算法~快速排序

八大排序算法~簡單選擇排序【記錄下標k變量的作用】

八大排序算法~堆排序

八大排序算法~歸並排序(采用分治和遞歸)

八大排序算法~基數排序(桶排序)

 

一,各個算法的情況與分析:

時間復雜度~一般咱就考慮平均情況就行,除非要求對時間特別苛刻才考最差情況~八大算法里就那個希爾排序跟快排時間復雜度最壞跟平均不同

 

1、直接插入排序 的時間和空間效率

✪ 時間復雜度:O(n2),空間復雜度:O(1); ~因為在空間上沒有利用什么輔助空間~穩定

 

2、希爾排序 的時間跟空間效率:

✪ 時間復雜度:大約O(n1.3),空間復雜度:O(1); ~因為在空間上沒有利用什么輔助空間~不穩定

不穩定的原因~假設有兩個相同的數字在兩個不同的子序列里邊,如果每個子序列把小數扔前大數扔后,可能導致兩個位置發生先后改變。

✿ 希爾排序注意點:不宜在鏈式結構上進行實現~因為分割的間隔d的值導致每個子序列的元素之間出現間隔,使用數組有下標可以快速找到哈!

 

3、冒泡排序 的時間跟空間效率:

✪ 時間復雜度:O(n2),空間復雜度:O(1); ~因為在空間上沒有利用什么輔助空間~穩定

 

4、快速排序 的時間跟空間效率:

✪ 時間復雜度:O(nlog2n),空間復雜度:O(log2n); ~ ~不穩定

■為什么時間是O(nlog2n)呢? ---遞歸算法耗費時間:O(log2n)

                                               ---其余數跟中心點進行比較耗費時間: O(n)

 ■為什么空間是O(log2n)呢?----快速排序不是原地排序---遞歸需要用到棧,而棧的長度取決於調用的深度,平均情況是 O(log2n),最差情況是O(n)。

不穩定的原因~假設有兩個相同的數字,取第一個數為中心點,當比較后會出現low=high的那個位置,導致第一個數放到low=high位置上導致兩個數前后順序發生改變。

 

5、簡單(直接)選擇排序 的時間跟空間效率:

✪ 時間復雜度:O(n2),空間復雜度:O(1); ~因為在空間上沒有利用什么輔助空間~不穩定。

不穩定的原因~直接選擇排序~擂台法【找小,從小到大排序】,假設有兩個相同的數字,當第一個數比擂台上的數還小,則替換掉擂台上的數,然后在第二個數的后邊又出現了其他比擂台的數替換掉擂台上的數,導致兩個數前后順序發生改變。

 

6、堆排序 的時間跟空間效率:

✪ 時間復雜度:O(nlog2n),空間復雜度:O(1); ~~因為在空間上沒有利用什么輔助空間~不穩定

■為什么時間是O(nlog2n)呢? ---遞歸算法耗費時間:O(log2n)

                                               ---最后一個元素放到根結點后,其余元素位置需要遍歷調整: O(n)。

不穩定的原因~調成成大根堆(或小根堆)時數據的調整導致相同的兩個數據先后位置發生改變。

✿ 堆排序注意點:不適合待排記錄個數較少的情況,對於n較大的文件還是很有效的。

 

7、歸並排序 的時間跟空間效率:

✪ 時間復雜度:O(nlog2n),空間復雜度:O(n);  ~~穩定

■為什么時間是O(nlog2n)呢? ---遞歸算法耗費時間:O(log2n)趟

                                              ---所有元素都需要進行歸並,每一趟都要合並n個元素: O(n)

 

8,基數排序(也叫桶排序)的時間跟空間效率:

✪ 時間復雜度:O(k*(n + m)),空間復雜度:O(n+m);  ~穩定

●為什么時間是O(k*(n + m))呢?

■ k 是關鍵字的位數的個數,例如待排數據中的最大一個數有三位數(個十百),則k=3;

■ n 是要分配n個數,m是要收集的m個數(m就是桶數,從桶中收集數據);

●為什么空間是O(n + m)呢?

■ 輔助空間是有m個桶,每個桶的深度是n;

 

二,總結八大算法的時間、空間效率、穩定性

引自:《數據結構c語言版嚴蔚敏PPT.pdf ~

 https://wenku.baidu.com/view/9e73cb8b69dc5022aaea00c1.html》

 

,使用建議

3-1,按時間性能考慮(平均時間性能)

■      時間復雜度O(nlog2n):快排、堆排、歸並~特點都用到了遞歸~快排最優

■      時間復雜度O(n):桶排

■      時間復雜度O(n2:冒泡、直接選擇、直接插入~特點外層循環進行趟數,內循環比較個數~直接插入最優

✿ 注意:當待排記錄序列按關鍵字順序有序時,直接插入和冒泡排序都能到到的時間復雜度為O(n);而此時對快排是最不好的情況,導致其時間復雜度退化為O(n2);

 

3-2,按空間性能(輔助空間)考慮

■ 空間復雜度O(1):冒泡、簡單選擇、直接插入、希爾、堆排~特點是就地排序

■ 空間復雜度O(log2n):快排~因為棧所需輔助空間

■ 空間復雜度O(n):歸並、桶排

 

3-3,按穩定性考慮(穩定性~兩個相同的數據因排序導致原先的先后順序發生改變):

■      八大排序不穩定算法: 希爾、直接選擇、快排、堆排

■      其中最不穩定算法:快排、堆排

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM