排序方法
空間複雜度
時間複雜度
穩定適用範圍
直接插入排序o(1)
o(nlogn) – o(n2) – o(n2)
穩定基本有序+小陣列
折半插入排序o(1)
平均–o(n2)
穩定相比直接插入,比較次數變少,但是插入次數不變
希爾(增量)排序o(1)
根據增量變化o(n1.25)~o(1.6xn1.25)
不穩定大陣列,n越大優勢越大
氣泡排序o(1)
o(n2)
穩定小陣列
快速排序(對冒泡的改進)o(1)
o(nlogn) – o(nlogn) – o(n2)
不穩定(出於效能上的考慮,犧牲了演算法的穩定性)
在序列有序或者逆序的情況下最不利於發揮其長處
選擇排序o(1)
o(n2)
不穩定性能差,穩定差,陣列小
堆排序o(1)
o(nlogn)
不穩定求最大(小)的m個
基數排序最壞o(kn)
o(n+b),其中n為待排序元素個數,而b是桶數
穩定桶數少的情況
歸併排序o(n)
o(nlogn)
穩定快速+穩定,犧牲空間換時間
總結:
1.空間複雜度:除了基數排序(桶)和歸併排序,其他的都是o(1)。歸併很容易是o(n),犧牲空間換時間。基數排序最壞則是o(kn)。
2.時間複雜度(效能):最好的則是堆排序和歸併排序,最好最壞都是線性對數階o(nlogn)。最差的是氣泡排序和選擇排序,最好最壞都是平方階o(n2)。希爾排序效能取決於陣列的大小和增量選擇,陣列越大價效比越高(突然想到小公尺)。直接插入排序和折半插入排序則取決於小陣列是否有序,有序價效比高。快速排序恰恰相反,有序或者逆序的情況下價效比低。(插入和快排妥妥的死對頭)。
3.穩定性:基於選擇(找出最大最小)的排序方法,比如簡單選擇排序,堆排序都是不穩定的。希爾排序和快排也是不穩定的。剩下的都穩定。(不穩定的4個)
4.適用範圍:
小陣列:選擇冒泡、插入、選擇等簡單排序方法;
大陣列:希爾排序等;
有序:直接插入和折半插入;
無序:快排;
效能好:歸併和堆排序;
只求最大(小)幾個:堆排序。
幾種常見的排序演算法對比
幾種常見的排序演算法對比 排序法 平均時間 最差情形 穩定度額外空間 備註 冒泡o n2 o n2 穩定o 1 n 小時較好 交換 o n2 o n2 不穩定o 1 n 小時較好 選擇 o n2 o n2 不穩定o 1 n 小時較好 插入 o n2 o n2 穩定o 1 大部分已排序時較好 基數 o...
幾種常見的排序演算法對比
排序法 平均時間 最差 情形 穩 定度 額外 空間 備註 冒泡o n 2 o n 2 穩定 o 1 n 小時較好 交換 o n 2 o n 2 不穩定o 1 n 小時較好 選擇 o n 2 o n 2 不穩定o 1 n 小時較好 插入 o n 2 o n 2 穩定 o 1 大部分已排序時較好 基數 ...
常見的排序演算法效能對比
排序法 平均時間 最差情形 穩定度額外空間 備註冒泡 o n2 o n2 穩定 o 1 n小時較好 交換 o n2 o n2 不穩定o 1 n小時較好 選擇 o n2 o n2 不穩定o 1 n小時較好 插入 o n2 o n2 穩定 o 1 大部分已排序時較好 基數o logrb o logrb ...