1. 程式人生 > >排序演算法——比較與總結

排序演算法——比較與總結

排序演算法1——圖解氣泡排序及其實現(三種方法,基於模板及函式指標)
排序演算法2——圖解簡單選擇排序及其實現
排序演算法3——圖解直接插入排序以及折半(二分)插入排序及其實現
排序演算法4——圖解希爾排序及其實現
排序演算法5——圖解堆排序及其實現
排序演算法6——圖解歸併排序及其遞迴與非遞迴實現
排序演算法7——圖解快速排序以及不同CUTOFF的時間測試
排序演算法8——圖解表排序
排序演算法9——圖解桶排序及其實現
排序演算法10——圖解基數排序(次位優先法LSD和主位優先法MSD)
排序演算法——比較與總結


排序演算法效率比較

不存在絕對意義上最佳的方法,這些排序方法分別適用於不同的條件下

排序方法 平均時間複雜度 最壞情況下時間複雜度 額外空間複雜度 穩定性
簡單選擇排序 O(N2 O(N2 O(1) 不穩定
氣泡排序 O(N2 O(N2 O(1) 穩定
直接插入排序 O(N2 O(N2 O(1) 穩定
希爾排序 O(Nd),1<d<2
O(N2 O(1) 不穩定
堆排序 O(NlogN) O(NlogN) O(1) 不穩定
快速排序 O(NlogN) O(N2 O(logN) 不穩定
歸併排序 O(NlogN) O(NlogN) O(N) 穩定
基數排序 O(D(N+R) O(D(N+R) O(N+R) 穩定

時間複雜度最低的方法——基數排序

它藉助O(N+R)輔助空間嚴格限制的元素資料型別,僅需要O(D(N+R))的時間複雜度
適用於處理數量大、關鍵字取值範圍有限的序列。同時,它是穩定的排序。

除基數排序外,其他的方法都是建立在比較和交換操作上的
決定它們效能的是比較、交換(主要是比較)的次數是否需要額外空間儲存臨時值

具有O(N2)時間複雜度的方法——簡單選擇、直接插入、氣泡排序

元素規模N較小或基本有序時,它們是比較好的排序方法。
簡單選擇排序是不穩定的,直接插入和氣泡排序是穩定的。

具有O(Nlog2N)時間複雜度的方法

1)堆排序

在棧頂元素輸出後需要尋找下一個堆頂元素,在尋找的過程中不斷將問題規模減小
堆排序在空間複雜度上表現出色,僅需要常數個額外空間

2)快速排序

在尋找主元以後,序列劃分為兩個部分,兩個部分內部各自進行比較交換,兩個部分之間沒有進行比較
然而,在最壞情況下,快速排序可能導致O(N2)的時間複雜度
另外,快速排序需要O(log2N)深度的棧空間

3)歸併排序

始終將規模減半再進行排序,在規模為N時再進行復雜度為O(N)的歸併操作
歸併排序需要O(N)的額外空間