排序算法【转】
原文:
十大经典排序算法(动图演示) 一像素
分类:
1. 比较类(非线性时间比较类排序):通过比较来决定元素间的相对次序,时间复杂度不能突破O(nlogn)
1.1 交换排序 :冒泡排序 、快速排序
1.2 插入排序 :简单插入排序 、 希尔排序
1.3 选择排序 : 简单选择排序 、堆排序
1.4 归并排序 :二路归并排序、多路归并排序
2.非比较类(线性时间非比较类排序):不通过比较来决定元素间的相对次序,可以突破基于比较排序的时间下界,以线性时间运行
计数排序、桶排序、基数排序
复杂度:
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
| 排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
| 冒泡排序 | O(n²) | O(n²) | O(n) | O(1) | 稳定 |
| 快速排序 | O(n*log₂n) | O(n²) | O(n*log₂n) | O(n*log₂n) | 不稳定 |
| 简单插入排序 | O(n²) | O(n²) | O(n) | O(1) | 稳定 |
| 希尔排序 (缩小增量排序) |
O(n1.3) |
O(n²) | O(n) | O(1) | 不稳定 |
| 简单选择排序 | O(n²) | O(n²) | O(n²) | O(1) | 不稳定 |
| 堆排序 | O(n*log₂n) | O(n*log₂n) | O(n*log₂n) | O(1) | 不稳定 |
| 二路归并排序 | O(n*log₂n) | O(n*log₂n) | O(n*log₂n) | O(n) | 稳定 |
| 多路归并排序 | |||||
| 计数排序 | O(n+k) | O(n+k) | O(n+k) | O(n+k) | 稳定 |
| 桶排序 | O(n+k) | O(n²) | O(n) | O(n+k) | 稳定 |
| 基数排序 | O(n*k) | O(n*k) | O(n*k) | O(n+k) | 稳定 |
浙公网安备 33010602011771号