排序演算法效能分析

2021-06-20 12:42:41 字數 2331 閱讀 6123

一、基於比較的排序演算法

1.插入排序法

直接插入排序,希爾排序,不常用的:tree sort;library sort:patience sorting

2.交換排序

氣泡排序,快速排序,計數排序

3.選擇排序

直接選擇排序,堆排序

4.歸併排序

歸併排序

二、不基於比較的排序演算法

基數排序,桶排序

三、空間,時間複雜度,穩定性

1.o(n^2)效能分析

平均效能為o(n^2)的有:直接插入排序,選擇排序,氣泡排序

在資料規模較小時(9w內),直接插入排序,選擇排序差不多。當資料較大時,氣泡排序演算法的時間代價最高。效能為o(n^2)的演算法基本上是相鄰元素進行比較,基本上都是穩定的。

2.o(nlogn)效能分析

平均效能為o(nlogn)的有:快速排序,歸併排序,希爾排序,堆排序。其中,快排是最好的, 其次是歸併和希爾,堆排序在資料量很大時效果明顯。

這四種排序可看作為「先進演算法」,其中,快排效率最高,但在待排序列基本有序的情況下,會變成氣泡排序,接近o(n^2).

希爾排序對增量的標準沒有較為滿意的答案,增量對效能會有影響。

歸併排序效率非常不錯,在資料規模較大的情況下,比希爾排序和堆排序要好。

多數先進的演算法都是因為跳躍式的比較,降低了比較次數,但犧牲了排序的穩定性。

3. 插入排序,氣泡排序,二叉樹排序,歸併排序都是穩定的

選擇排序,希爾排序,快速排序,堆排序是不穩定的。

四、排序演算法選擇

1.資料規模較小

(1)待排序列基本序的情況下,可以選擇直接插入排序

(2)對穩定性不作要求宜用選擇排序,對穩定性有要求宜用插入或冒泡

2.資料規模不是很大

(1)完全可以用記憶體空間,序列雜亂無序,對穩定性沒有要求,快速排序,此時要付出log(n)的額外空間。

(2)序列本身可能有序,對穩定性有要求,空間允許下,宜用歸併排序

3.海量級別的資料,必須按塊放在外存上

(1)對穩定性有求,則可考慮歸併排序。

(2)對穩定性沒要求,宜用堆排序

4.序列初始基本有序(正序),宜用直接插入,冒泡,

隨機快排

五、各排序演算法整體分析

氣泡排序、插入排序、希爾排序以及快速排序對資料的有序性比較敏感,尤其是氣泡排序和插入排序;

選擇排序不關心表的初始次序,它的最壞情況的排序時間與其最佳情況沒多少區別,其比較次數為 n(n-1)/2,但選擇排序可以   非常有效的移動元素。因此對次序近乎正確的表,選擇排序可能比插入排序慢很多。

氣泡排序在最優情況下只需要經過n-1次比較即可得出結果(即對於完全正序的表),最壞情況下也要進行n(n-1)/2 次比較,與選擇排序的比較次數相同,但資料交換的次數要多餘選擇排序,因為選擇排序的資料交換次數頂多為 n-1,而氣泡排序最壞情況下的資料交換n(n-1)/2 。氣泡排序不一定要進行 趟,但由於它的記錄移動次數較多,所以它的平均時間效能比插入排序要差一些。

插入排序在最好的情況下有最少的比較次數 ,但是它在元素移動方面效率非常低下,因為它只與毗鄰的元素進行比較,效率比較低。

希爾排序實際上是預處理階段優化後的插入排序,一般而言,在 比較大時,希爾排序要明顯優於插入排序。

快速排序採用的「大事化小,小事化了」的思想,用遞迴的方法,將原問題分解成若干規模較小但與原問題相似的子問題進行求解。快速演算法的平均時間複雜度為o(nlogn) ,平均而言,快速排序是基於關鍵字比較的內部排序演算法中速度最快者;但是由於快速排序採用的是遞迴的方法,因此當序列的長度比較大時,對系統棧占用會比較多。快速演算法尤其適用於隨機序列的排序。

因此,平均而言,對於一般的隨機序列順序表而言,上述幾種排序演算法效能從低到高的順序大致為:氣泡排序、插入排序、選擇排序、希爾排序、快速排序。但這個優劣順序不是絕對的,在不同的情況下,甚至可能出現完全的效能逆轉。

對於序列初始狀態基本有正序,可選擇對有序性較敏感的如插入排序、氣泡排序、選擇排序等方法

對於序列長度 比較大的隨機序列,應選擇平均時間複雜度較小的快速排序方法

各種排序演算法都有各自的優缺點,適應於不同的應用環境,因此在選擇一種排序演算法解決實際問題之前,應當先分析實際問題的型別,再結合各演算法的特點,選擇一種合適的演算法。

各排序演算法效能分析

插入排序 最壞時間始n 2 快速排序和插入排序的區別是 插入排序始將關鍵字插入已排序的子串行中,而快速排序始 對整個檔案,把基準關鍵字放到正確的位置上。快排最壞時間依然是n 2,平均時間始nlgn。在堆排序 的過程中只需乙個輔助空間 所以空間 複雜度為 0 1 堆排序的時間複雜度為 nlgn 由於堆...

常用排序演算法效能分析

在平時寫 時比較常用的幾種演算法,效能 如下 排序法 平均時間 最壞 穩定額外空間 氣泡排序 o n 2 o n 2 穩定 o 1 選擇排序 o n 2 o n 2 不穩定 o 1 插入排序 o n 2 o n 2 穩定 o 1 快速排序 o nlogn o n o n 2 不穩定 o nlogn ...

排序演算法效能分析實驗

掌握選擇排序 氣泡排序 合併排序 快速排序 插入排序演算法原理 掌握不同排序演算法時間效率的經驗分析方法,驗證理論分析與經驗分析的一致性。現在有10億的資料 每個資料四個位元組 請快速挑選出最大的十個數,並在小規模資料上驗證演算法的正確性。排序不多說,講一下第3點。3是經典的topk問題,這麼大的資...