重要排序算法的总结
-
稳定性对基础类型 对象来说毫无意义
-
稳定性对非基础类型 对象有意义,可以保留之前的相对次序
-
主要算法时间、空间、稳定性总结
时间 空间 稳定性
SelectionSort O(N^2) O(1) 无
BubbleSort O(N^2) O(1) 有
InsertionSort O(N^2) O(1) 有
MergeSort O(N*logN) O(N) 有
QuickSort O(N*logN) O(logN) 无
HeapSort O(N*logN) O(1) 无
CountSort O(N) O(M) 有
RadixSort O(N) O(M) 有
注意:随机快速排序的复杂度一定要按照概率上的期望指标来估计,用最差的复杂度估计无意义
-
排序的选择: 一切看你在排序过程中在意什么
- 数据量非常小 的情况下可以做到非常迅速:插入排序
- 性能优异、实现简单且利于改进 (面对不同业务可以选择不同划分策略)、不在乎稳定性:随机快排
- 性能优异、不在乎额外空间 占用、具有稳定性:归并排序
- 性能优异、额外空间占用要求O(1) 、不在乎稳定性:堆排序