以下具體演算法中描述的均是公升序排序
複雜度分析請結合具體演算法(點選排序方式可到對應部落格)
排序方式
平均時間複雜度
最優時間複雜度
最差時間複雜度
空間複雜度
穩定性氣泡排序
o(n2)
o(n2)
o(n2)
o(1)
穩定快速排序
o(nlogn)
o(nlogn)
o(n2)
o(logn)
不穩定直接插入排序
o(n2)
o(n)
o(n2)
o(1)
穩定希爾排序
*o(n1.3)
*o(n)
*o(n2)
o(1)
不穩定簡單選擇排序
o(n2)
o(n2)
o(n2)
o(1)
不穩定堆排序
o(nlogn)
o(nlogn)
o(nlogn)
o(1)
不穩定二路歸併排序
o(nlogn)
o(nlogn)
o(nlogn)
o(n)
穩定計數排序
o(n+m)
o(n+m)
o(n+m)
o(n+m)
穩定桶排序
o(n + n(logn - logk))
o(n)
o(n2)
o(n+k)
穩定基數排序
o(d(n+r))
o(d(n+r))
o(d(n+r))
o(n+r)
穩定注:n為待排序列長度,m為待排序列取值範圍大小,k為桶數量,d為陣列最高位數,r為基數
公用函式
// 交換array[i]和array[j]
function swap(array, i, j)
// 不需額外空間的兩數交換
// 此處只是記錄,下面並沒有用過這個函式
function swap_v2(a, b)
// 返回陣列元素中的最高位數
function gethighdigittemp(array, radix)
}var digit = 1;
for (; max >= radix; digit++)
return digit;
}
關於排序演算法
以選擇排序為例,乙個能夠比較數字 字元的排序模板 public class selection public static void sort comparable a int n a.length for int i 0 i 這個排序演算法模板適用於任何實現了comparable介面的資料型別。如...
排序演算法總結
1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...
排序演算法總結
1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...