基本上排序演算法,基於選擇的排序除了希爾,快排,歸併,堆排序之外沒啥實用性,只不過是練手的工具罷了,像 o(n^2) 這樣過高的時間複雜度,已經失去了它的實用意義了
排序類別
排序演算法
平均時間複雜度
最好情況 時間複雜度
最壞情況 時間複雜度
空間複雜度
穩定性適用場景
交換排序
氣泡排序
o(n^2)
o(n)
o(n^2)
o(1)
穩定資料基本有序,資料量不大,要求穩定的情況下
選擇排序
簡單選擇排序
o(n^2)
o(n^2)
o(n^2)
o(1)
不穩定資料基本有序,資料量不大的情況下
插入排序
直接插入排序
o(n^2)
o(n)
o(n^2)
o(1)
穩定資料基本有序,資料量不大,要求穩定的情況下
插入排序
折半插入排序
o(n^2)
o(n)
o(n^2)
o(1)
穩定資料基本無序,資料量大的情況下
插入排序
希爾排序o(n^1.3)
o(n)
o(n^2)
o(1)
不穩定資料基本無序,資料量大的情況下
交換排序
快速排序o(nlogn)
o(nlogn)
o(n^2)
o(logn)~o(n)
不穩定資料基本無序,資料量大的情況下
選擇排序
堆排序o(nlogn)
o(nlogn)
o(nlogn)
o(1)
不穩定資料量基本較大情況下
內部排序
歸併排序o(nlogn)
o(nlogn)
o(nlogn)
o(n)
穩定資料量大,且要求穩定的情況下
內部排序
基數排序o(nk)
o(nk)
o(nk)
o(n+k)
穩定適用於特定場景,有基數的條件下
內部排序
桶排序o(n+k)
o(n+k)
o(n^2)
o(n+k)
穩定適用於特定場景,穩定的,跨度不大的,浮點數的場景
內部排序
計數排序o(n+k)
o(n+k)
o(n+k)
o(k)
穩定適用於特定場景,穩定的,跨度不大的,非浮點數的場景
基本無實用性的排序演算法
氣泡排序,簡單選擇排序,直接插入排序,折半插入排序。
這幾種排序也是最簡單的幾種排序,由於平均時間複雜度達到了 o(n^2) 所以基本是不會去用了
具有實用性的基於比較的排序
快速排序,希爾排序,歸併排序,堆排序
實際排序速率:快速排序 優於 歸併排序 優於 希爾排序 優於 堆排序
時間複雜度能達到 o(n) 的超高效排序
當 k 不大時,基數排序,桶排序,計數排序都可以達到 o(n) 的時間複雜度,但是我們為什麼不大量使用他們呢,因為它們都是需要對排序的資料有嚴格的場景要求
應用最廣泛的排序演算法
快速排序,因為其排序速度是極快的,平均時間複雜度可以達到 o(nlogn),也沒什麼場景限制,所以快排還是比較完美的
理論上最優秀的排序
堆排序(理論最快)
為什麼說堆排序是理論上最優呢,因為它理論上我們可以看到它的平均,最好,最差時間複雜度都是比較排序的下界,而且還是乙個就地排序,空間複雜度為 o(1),理論上快排最差可以達到 o(n^2) 的時間複雜度,而且快排空間複雜度可以達到 o(logn) 到 o(n)。那為何實際中快排要更快呢?是因為快排很少能達到最差時間複雜度的場景,所以很難達到 o(n^2) 的時間複雜度,再乙個就是堆排序比較的幾乎都不是相鄰的元素,所以它對 cache 這種結構來講是很不友好,所以實際使用中要比快排慢,實際使用會發現它也比歸併,希爾慢
實際中最快的排序演算法
快速排序(實際最快)
占用空間最少的排序演算法中最快的
希爾排序(空間最少中的最快)
穩定的排序演算法中最快的
歸併排序(穩定中的最快)
綜合能力最好的排序
快排和希爾排序
速度上:快速排序 > 歸併排序 > 希爾排序 > 堆排序
空間上:希爾排序 > 堆排序 > 快速排序 > 歸併排序
綜合比較後發現快排和希爾這兩個是最好的排序,那為什麼寫快排的多呢,因為希爾排序涉及到乙個如何選取增量的問題,這個就涉及到數學方面的論證了,比較麻煩。
所以在我們更注重時間而忽視空間的時候我們建議採用快排,當我們非常注重空間,不是特別在意時間的我們建議使用希爾排序
內部排序與外排序
內部排序就是可以在記憶體中完成的排序,一般所說的排序都是內排序,但是資料量太大,記憶體存不下這麼多資料,只能使用到外排序了,外排序如多路歸併排序
基於比較和基於資料分配
基於比較的排序時間複雜度下界是 o(nlogn),基於資料分配的排序時間複雜度則可以突破下界
排序演算法穩定性的意義
若僅僅是對數字排序,穩定性就顯得毫無意義,穩定的排序演算法用於即使數值是一樣,但是對於初始位置是有意義的場景中
各類排序演算法比較
排序演算法 重點時間複雜度 穩定性直接插入排序 將待插入元素插入到已有序序列中的某個合適位置,得到新有序序列 最壞情況下o n n y折半插入排序 在決定當前元素插入位置時不採用插入查詢的方式,而是二分查詢 相比直接插入,比較的次數明顯減半,但移動的次數沒有減少。所以還是o n n y二路插入排序 ...
各類排序演算法的比較 摘抄
按平均時間將排序分為四類 1 平方階 o n2 排序 一般稱為簡單排序,例如直接插入 直接選擇和氣泡排序 2 線性對數階 o nlgn 排序 如快速 堆和歸併排序 3 o n1 階排序 是介於0和1之間的常數,即0 1,如希爾排序 4 線性階 o n 排序 如桶 箱和基數排序。各種排序方法比較 簡單...
各類排序演算法複雜度比較
各種排序演算法比較 各種常用排序演算法 類別排序方法 時間複雜度 空間複雜度 穩定性複雜性 特點最好 平均最壞 輔助儲存 簡單插入 排序直接插入 o n o n2 o n2 o 1 穩定簡單 希爾排序 o n o n1.3 o n2 o 1 不穩定複雜 選擇排序 直接選擇 o n o n2 o n2...