各類排序演算法比較分析

2021-10-04 11:21:57 字數 3027 閱讀 1345

基本上排序演算法,基於選擇的排序除了希爾,快排,歸併,堆排序之外沒啥實用性,只不過是練手的工具罷了,像 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...