排序演算法
平均時間複雜度由高到低為:
說明:雖然完全逆續的情況下,快速排序會降到選擇排序的速度,不過從概率角度來說(參考資訊學理論,和概率學),不對演算法做程式設計上優化時,快速排序的平均速度比堆排序要快一些。
名稱資料物件
穩定性時間複雜度
空間複雜度
描述平均
最壞插入排序
陣列、鍊錶
√o(n
2)o(1)
(有序區,無序區)。把無序區的第乙個元素插入到有序區的合適的位置。對陣列:比較得少,換得多。
直接選擇排序陣列×
o(n2)
o(1)
(有序區,無序區)。在無序區里找乙個最小的元素跟在有序區的後面。 對陣列:比較得多,換得少。鍊錶√
堆排序陣列
×o(nlogn)
o(1)
(最大堆,有序區)。從堆頂把根卸出來放在有序區之前,再恢復堆。
歸併排序
陣列、鍊錶
√o(nlogn)
o(n) +o(logn) , 如果不是從下到上
把資料分為兩段,從兩段中逐個選最小的元素移入新資料段的末尾。可從上到下或從下到上進行。
快速排序陣列×
o(nlogn)
o(n2)
o(logn) ,o(n)
(小數,樞紐元,大數)。
accum qsort鍊錶√
o(nlogn)
o(n2)
o(logn) ,o(n)
(無序區,有序區)。把無序區分為(小數,樞紐元,大數),從後到前壓入有序區。
決策樹排序
√o(logn!)
o(n!)
o(n)
計數排序
陣列、鍊錶
√o(n)
o(n+m)
統計小於等於該元素值的元素的個數 i,於是該元素就放在目標陣列的索引 i位。(i≥0)
桶排序陣列、鍊錶
√o(n)
o(m)
將值為 i 的元素放入i 號桶,最後依次把桶裡的元素倒出來。
基數排序
陣列、鍊錶
√一種多關鍵字的排序演算法,可用桶排序實現。
排序演算法分類
交換排序法
氣泡排序 |
雞尾酒排序 |
奇偶排序 |
梳排序 |
gnome sort |
快速排序
選擇排序法
選擇排序 |
堆排序插入排序法
插入排序 |
希爾排序 |
tree sort |
library sort |
patience sorting
歸併排序法
歸併排序 |
strand sort
非比較排序法
基數排序 |
桶排序 |
計數排序 |
鴿巢排序 |
burstsort |
bead sort 其他
拓撲排序 |
排序網路 |
bitonic sorter |
batcher odd-even mergesort |
pancake sorting
低效排序法
bogosort |
stooge sort
排序演算法總結
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...
排序演算法總結
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...