最近總結了以下排序演算法:
插入排序:直接插入排序,希爾排序
交換排序:氣泡排序,快速排序(挖坑法,前後指標法,左右指標法)
選擇排序:直接選擇排序,堆排序
歸併排序
所以想對這些排序演算法再做乙個對比。
一、理論值對比
(參考: 這篇總結了各種排序演算法的實現思想,也是我自己需要完善的地方)
排序法最差時間分析
平均時間複雜度
穩定度空間複雜度
氣泡排序
o(n2)
o(n2)
穩定o(1)
快速排序
o(n2)
o(n*log2n)
不穩定o(log2n)~o(n)
選擇排序
o(n2)
o(n2)
不穩定o(1)
二叉樹排序
o(n2)
o(n*log2n)
不一頂o(n)
插入排序
o(n2)
o(n2)
穩定o(1)
堆排序o(n*log2n)
o(n*log2n)
不穩定o(1)
希爾排序oo
不穩定o(1)
(希爾排序可以參考這篇:
二、執行時間對比
歸併排序:o(nlog2n)
2000個元素時:
20000個元素時:
50000個元素時:
100000個元素時:
從上面結果可以看出:直接插入排序(direct_insert)、直接選擇排序(select_direct)、氣泡排序(bubble)耗時隨著資料量的增加,耗時增加的非常快。
接下來,我們再來對比其他幾種排序演算法的耗時:
200000個元素:
500000個元素:
1000000個元素:
2000000個元素:
10000000個元素:
從上面的結果可以看出來:快速排序(挖坑法,前後指標法,左右指標法)的耗時最少,歸併排序(merge)其次,堆排序(heap)和希爾排序(shell)最多。
結論:一般來說,當資料規模較小時,應該選擇直接插入排序或氣泡排序。快速排序是一種不穩定的排序,但是對於大部分已經排好的資料,快速排序會浪費大量不必要的步驟。快速排序適用於大量隨機資料的情況。
各種排序演算法總結(待完成)
參考 http blog.csdn.net sturun archive 2008 12 11 3491225.aspx 簡潔,好 http blog.csdn.net yuguanglou archive 2004 11 24 193133.aspx 類模板 參考演算法i iv基礎 資料結構 排序...
常見的排序演算法總結
include 演算法只是比較了元素為整數的內容.大部分的排序只是做了簡單的測試.僅供參考.void swap int a int b bool less int a,int b 對內部中的元素先找到k值,然後分兩塊 int partition int r,int lo,int hi while j...
常見的排序演算法總結
平時一直做專案,業務邏輯,對演算法這塊逐漸有了生疏 今天有空總結一下排序演算法 1 氣泡排序 氣泡排序的原理就是兩兩相比,從小到大的話前面比後面大就交換,從大到大的話前面比後面小就交換,比如有一組數 1,10,5,3,2 如何對它做排序 比如從小到大 第一步 1,10,5,3,2 源資料 1,10,...