算法性能:十種常見排序算法時間效率直觀對比


一、10算法分類

本文一共總結了10種排序算法,其中 

基於比較的排序算法有

冒泡排序,插入排序,希爾排序,選擇排序,歸並排序,堆排序,快速排序;

線性時間排序算法包括

計數排序,基數排序,桶排序;

 

前邊有提到過,基於比較的排序算法,時間復雜度最差達到O(nlogn)O(nlogn),無法突破這個界限,只有線性時間排序能夠突破,達到O(n)O(n),所以說,如果滿足了線性時間排序算法的限制條件,使用線性時間排序將會使排序性能得到極大提升。

二、實際測試數據 

下面對以上涉及到的每種算法做一個簡單的實際測試對比:利用隨機數,隨機生成區間0 ~ K之間的序列,共計N個數字,利用各種算法進行排序,記錄排序所需時間,測試環境為i7+vs2015+Debug版本。

算法\輸入數據 N=50 K=50 N=200 K=100 N=500 K=500 N=2000 K=2000 N=5000 K=8000 N=10000 K=20000 N=20000 K=20000 N=20000 K=200000
冒泡排序 0ms 15ms 89ms 1493ms 9363ms 36951ms 147817ms 143457ms
插入排序 1ms 13ms 82ms 1402ms 8698ms 34731ms 134817ms 134836ms
希爾排序 0ms 1ms 6ms 30ms 110ms 257ms 599ms 606ms
選擇排序 0ms 5ms 31ms 461ms 2888ms 11736ms 45308ms 44838ms
堆排序 0ms 3ms 9ms 40ms 124ms 247ms 525ms 527ms
歸並排序 2ms 6ms 18ms 75ms 199ms 392ms 778ms 793ms
快速排序 0ms 1ms 2ms 14ms 36ms 84ms 196ms 163ms
計數排序 0ms 1ms 1ms 5ms 15ms 32ms 51ms 62ms
基數排序 0ms 1ms 4ms 19ms 47ms 114ms 237ms 226ms
桶排序 0ms 2ms 6ms 25ms 68ms 126ms 254ms 251ms

三、性能對比小結

1. 傳統簡單排序確實當數據量很小的時候也表現不錯,但當數據量增大,其耗時也增大十分明顯; 

2. 冒泡,插入,選擇三種排序中,當數據量很大時,選擇排序性能會更好; 

3. 堆排,希爾,歸並,快排幾種排序算法也表現不錯,源於其時間復雜度達到了O(nlogn)O(nlogn); 

4. 隨機快速排序性能確實表現十分亮眼,甚至有時比基數排序和桶排序還好,這可能也是快排如此流行的原因; 

5. 線性排序中計數排序表現最好,但他們的限制也比較明顯,只能處理范圍內的正整數。

 


免責聲明!

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



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