總結 關於排序演算法

2022-06-05 11:42:05 字數 1322 閱讀 9700

以下具體演算法中描述的均是公升序排序

複雜度分析請結合具體演算法(點選排序方式可到對應部落格)

排序方式

平均時間複雜度

最優時間複雜度

最差時間複雜度

空間複雜度

穩定性氣泡排序

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...