快速排序、歸並排序、堆排序的對比


即使是同樣的算法,不同的人寫的代碼,不同的應用場景下執行時間也可能差別很大。下面是一個測試數據:

測試的平均排序時間:數據是隨機整數,時間單位是s
數據規模    快速排序       歸並排序        希爾排序        堆排序
1000萬       0.75           1.22          1.77          3.57
5000萬       3.78           6.29          9.48         26.54  
1億          7.65          13.06         18.79         61.31

大數據量下,快速排序優於歸並排序優於堆排序。

原因如下:

快速排序 vs 歸並排序

當數據量越來越大時,

歸並排序:比較次數少,速度慢。

快速排序:比較次數多,速度快。

快速排序的優勢越來越明顯。

原因分析:個人認為是當數據量越來越大時,盡管歸並排序的比較次數較少,但是歸並排序后期的合並操作所花費的時間便越來越大,合並操作對整體的效率影響越來越明顯,包括后面大量數據的賦值操作等。所以當數據量變大時,不需要專門合並的快速排序的優勢就變得越發明顯。

 

快速排序 vs 堆排序

堆排序每次取一個最大值和堆底部的數據交換,重新篩選堆,把堆頂的X調整到位,有很大可能是依舊調整到堆的底部(堆的底部X顯然是比較小的數,才會在底部),然后再次和堆頂最大值交換,再調整下來,可以說堆排序做了許多無用功。

總結起來就是,快排的最壞時間雖然復雜度高,但是在統計意義上,這種數據出現的概率極小,而堆排序過程里的交換跟快排過程里的交換雖然都是常量時間,但是常量時間差很多。

 

參考文章

歸並排序和快速排序比較

快速排序 Vs. 歸並排序 Vs. 堆排序——誰才是最強的排序算法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM