排序演算法——比較與總結
阿新 • • 發佈:2018-12-21
排序演算法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)的額外空間