排序類別
排序方式
時間複雜度(最好)
時間複雜度(平均)
時間複雜度(最差)
空間複雜度
穩定性複雜性
交換排序
氣泡排序
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 ...