排序法 | 平均时间 | 最差情形 | 稳定度 | 额外空间 | 备注 |
冒泡 | O(n2) | O(n2) | 稳定 | O(1) | n小时较好 |
交换 | O(n2) | O(n2) | 不稳定 | O(1) | n小时较好 |
选择 | O(n2) | O(n2) | 不稳定 | O(1) | n小时较好 |
插入 | O(n2) | O(n2) | 稳定 | O(1) | 大部分已排序时较好 |
基数 | O(logRB) | O(logRB) | 稳定 | O(n) | B是真数(0-9), R是基数(个十百) |
Shell | O(nlogn) | O(ns) 1<s<2 | 不稳定 | O(1) | s是所选分组 |
快速 | O(nlogn) | O(n2) | 不稳定 | O(nlogn) | n大时较好 |
归并 | O(nlogn) | O(nlogn) | 稳定 | O(1) | n大时较好 |
堆 | O(nlogn) | O(nlogn) | 不稳定 | O(1) | n大时较好 |
总结
- 快速排序是最特殊的:时间复杂度好坏不一样,与初始顺序有关,额外空间,稳定性
- 稳定性:不稳定的有交换、选择、快速、堆排序、希尔排序(口诀:快选交换队儿-----还没选择交换的队儿,所以是不稳定的)
- 时间复杂度低的有:快、归、堆、希尔(口诀:快归队儿)
- 计数排序和基数排序思想来源于桶排序,复杂度为O(n)
- 对于序列初始状态基本有正序,可选择对有序性较敏感的如插入排序、冒泡排序、选择排序,特别是改进后的堆排序等方法,对于序列长度 比较大的随机序列,应选择平均时间复杂度较小的快速排序方法。