基本排序演算法

2021-07-28 18:54:32 字數 1254 閱讀 2166

排序類別

排序方式

時間複雜度(最好)

時間複雜度(平均)

時間複雜度(最差)

空間複雜度

穩定性複雜性

交換排序

氣泡排序

o(n)

o(n^2)

o(n^2)

o(1)

穩定簡單

交換排序

快速排序

o(nlogn)

o(nlog2n)

o(n^2)

o(log2n)~o(n)

不穩定複雜

插入排序

直接插入排序

o(n)

o(n^2)

o(n^2)

o(1)

穩定簡單

插入排序

希爾排序

o(nlog2n)

o(n^1.3)

o(n^2)

o(1)

不穩定複雜

選擇排序

簡單選擇排序

o(n)

o(n^2)

o(n^2)

o(1)

不穩定簡單

選擇排序

堆排序o(nlogn)

o(nlog2n)

o(nlog2n)

o(1)

不穩定複雜

歸併排序

歸併排序

o(nlog2n)

o(nlog2n)

o(nlog2n)

o(n)

穩定複雜

交換排序:

插入排序:

選擇排序:

歸併排序:

冒泡和選擇排序比較:

區別在於:冒泡演算法,每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於:先並不急於調換位置,先從a[1]開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a[p]和a[1]對調,這時a[1]到a[10]中最小的資料就換到了最前面的位置。

所以,選擇排序每掃瞄一遍陣列,只需要一次真正的交換,而冒泡可能需要很多次。比較的次數是一樣的。

已知的最好步長序列是由sedgewick提出的(1, 5, 19, 41, 109,…),該序列的項來自9×4i−9×2i+1

和2i+2×(2i+2−3)+1

這兩個算式[1]。這項研究也表明「比較在希爾排序中是最主要的操作,而不是交換。」用這樣步長序列的希爾排序比插入排序要快,甚至在小陣列中比快速排序和堆排序還快,但是在涉及大量資料時希爾排序還是比快速排序慢。

快排、堆排

基本排序排序演算法

時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...

基本排序排序演算法

時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...

基本排序演算法

將要排序的物件分作兩部份,乙個是已排序的,乙個是未排序的,從後端未排序部份選擇乙個最小值,並放入前端已排序部份的最後乙個,例如 排序前 70 80 31 37 10 1 48 60 33 80 1 80 31 37 10 70 48 60 33 80 選出最小值1 1 10 31 37 80 70 ...