http://ywf676.blog.163.com/blog/static/16142158320122124324828/
(原文有wiki算法链接)
在计算机科学所使用的排序算法通常被分类为:
- 计算的复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n log n),且坏的性能是O(n2)。对于一个排序理想的性能是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要O(n log n)。
- 内存使用量(以及其他电脑资源的使用)
- 稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。
- 一般的方法:插入、交换、选择、合并等等。交换排序包含冒泡排序和快速排序。选择排序包含希尔排序和堆排序
平均时间复杂度由高到低为:
稳定的
- 冒泡排序(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 额外空间