間間斷斷的將9種排序實現,並且將其以部落格筆記的形式記錄下來;現在就該來綜合的分析這九種排序,讓我們先來看看其演算法複雜度和穩定性的分析結果:
演算法複雜度以及穩定度分析
演算法名稱
平均時間
輔助空間
穩定性氣泡排序
o(n2)
o(1)
是選擇排序
o(n2)
o(1)
否插入排序
o(n2)
o(1)
是自底向上歸併排序
o(nlog2n)
o(n)
是自頂向下歸併排序
o(nlog2n)
o(n)
是快速排序
o(nlog2n)
o(n)
否堆排序
o(nlog2n)
o(1)
否基數排序
o(dn)
o(rn)
是希爾排序
\o(1)否
排序的時間效率比較
下圖表名了各種演算法在不同資料規模下,完成排序所消耗的時間(毫秒為單位),從表中可以顯然看出o(n2)的排序演算法比o(nlog2n)的演算法 時間多出幾百上千倍,而且隨著資料資料規模增大時間比也會隨著增大;因為排序的資料採用隨機數,順序將被打亂,快速排序演算法優於其他排序演算法!
演算法名稱
1萬2萬
3萬4萬
5萬6萬
7萬8萬
9萬10萬
氣泡排序
1442
5497
12206
21861
34017
49148
67394
88880
111939
139071
選擇排序
199816
1790
3254
5062
7166
9645
12636
16102
19643
插入排序
178717
1628
2882
4458
6446
8822
11649
14547
17914
自底向上歸併排序36
9121518
2226
2833
自頂向下歸併排序37
1115
1823
2731
3640
快速排序25
8111418
2125
2932
堆排序3712
1619
2326
3034
37基數排序921
3040
4959
6675
9098
希爾排序38
1115
2424
2935
4041
下面採用圖表形式將資料直觀展示出來(將o(n2)的演算法和o(nlog2n)演算法分開,因為完全不是乙個數量級的):
上圖顯示快排速度和自底向上歸併排序奇虎相當,接下來是堆排序、希爾排序;出乎意料的是基數排序,號稱o(dn)的基數排序卻不是那麼靠前,個人覺得和氣泡排序速度慢的原因相同,賦值操作太多,降低了時間效率。
**:
Algorithm 九種常用排序的效能分析
最近間間斷斷的將9種排序演算法用c實現,並且將其以部落格筆記的形式記錄下來,其中各個排序演算法的描述部分特別參考了csdn上太陽落雨 的部落格!現在就該來綜合的分析這九種排序,讓我們先來看看其演算法複雜度和穩定性的分析結果 下圖表名了各種演算法在不同資料規模下,完成排序所消耗的時間 毫秒為單位 從表...
常用排序演算法效能分析
在平時寫 時比較常用的幾種演算法,效能 如下 排序法 平均時間 最壞 穩定額外空間 氣泡排序 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 ...
七種常用排序演算法總結
1.氣泡排序 bubble sort package com.zha.wmls.sort 氣泡排序 每一輪找出乙個最大的,放在最後面,穩定 時間複雜度為n 2 public class bubblesort long befortime system.currenttimemillis sort a...