閱讀500 返回首頁    go 阿裏雲 go 技術社區[雲棲]


排序算法

排序算法總結(from 維基)

排序算法總表

理論
 
交換排序
 
選擇排序
 
插入排序
 
歸並排序
 
分布排序
 
並發排序
 
混合排序
 
其他


排序算法穩定性

在這個表格中,n是要被排序的紀錄數量以及k是不同鍵值的數量。

穩定的

  • 冒泡排序(bubble sort) — O(n2)
  • 雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2)
  • 插入排序 (insertion sort)— O(n2)
  • 桶排序 (bucket sort)— O(n); 需要 O(k) 額外空間
  • 計數排序 (counting sort) — O(n+k); 需要 O(n+k) 額外空間
  • 合並排序 (merge sort)— O(n log n); 需要 O(n) 額外空間
  • 原地合並排序 — O(n2)
  • 二叉排序樹排序 (Binary tree sort) — O(n log n)期望時間; O(n2)最壞時間; 需要 O(n) 額外空間
  • 鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外空間
  • 基數排序 (radix sort)— O(n·k); 需要 O(n) 額外空間
  • Gnome 排序 — O(n2)
  • 圖書館排序 — O(n log n) with high probability, 需要 (1+ε)n 額外空間

不穩定

不實用的排序算法

  • Bogo排序 — O(n × n!),最壞的情況下期望時間為無窮。
  • Stupid sort — O(n3); 遞歸版本需要 O(n2) 額外存儲器
  • 珠排序(Bead sort) — O(n) or O(√n), 但需要特別的硬件
  • Pancake sorting — O(n), 但需要特別的硬件

平均時間複雜度

平均時間複雜度由高到低為:

說明:雖然完全逆序的情況下,快速排序會降到選擇排序的速度,不過從概率角度來說(參考信息學理論,和概率學),不對算法做編程上優化時,快速排序的平均速度比堆排序要快一些。

最後更新:2017-04-03 19:06:48

  上一篇:go 雅安,挺住!
  下一篇:go 怎樣花兩年時間去麵試一個人