相关术语
- 算法稳定性:如果 a=b,排序前后 a、b的相对位置不变即为稳定;
- 算法时间复杂度:算法运行时间的函数,用大 O 符号表述;
- 算法空间复杂度:算法需要的内存空间大小;
算法分类
按算法时间复杂度分类
时间复杂度:O(n^2)
插入排序、选择排序、冒泡排序
时间复杂度:O(n^1.3)
希尔排序
时间复杂度:O(nlogn)
堆排序、归并排序、快速排序
时间复杂度:O(n+k)
计数排序、桶排序、基数排序
按空间复杂度分类
空间复杂度:O(1)
插入排序、选择排序、冒泡排序、希尔排序、堆排序
空间复杂度:O(nlog2n)
快速排序
空间复杂度:O(n)
归并排序
空间复杂度:O(n+k)
计数排序、桶排序、基数排序
按稳定性分类
稳定
插入排序、冒泡排序、归并排序、计数排序、桶排序、基数排序
不稳定
希尔排序、快速排序、堆排序、选择排序
按照使用场景区分
若待排序数组长度 n 较小
可以采用直接插入排序或者选择排序,因为实现简单;另外,如果待排数组基本有序那么可以考虑使用直接插入排序效率较高;
若待排序数组长度 n 较大
可以在三种高级排序算法中做选择:
- 如果追求计算时间短可以选择快速排序;
- 如果追求使用空间少可以选择堆排序;
- 如果追求排序后稳定可以选择归并排序;