Java排序算法(十二):总结
前面讲了10种基本的排序算法,现在来作下总结,基于下面几个方面来比较各个排序算法的优劣:
时间复杂度,空间复杂度,稳定性,适用场景
排序算法 | 时间复杂度 | 空间复杂度 | 稳定性 | 适用场景 |
直接选择排序 | O(n^2) | O(1) | 不稳定 | 时间效率不高,但是空间效率很高,算法实现比较简单 |
堆排序 | O(nlogn),底数为2 | O(1) | 不稳定 | 时间效率很高,但是不稳定 |
冒泡排序 | O(n^2) | O(1) | 稳定 | 算法实现比较简单,稳定,且对于已基本排序的数据排序,时间复杂度为O(n) |
快速排序 | 最好O(nlogn),底数为2 最坏O(n^2) 平均O(nlogn),底数为2 | O(logn),底数为2 | 不稳定 | 时间效率很高,但是不稳定 |
直接插入排序 | O(n^2) | O(1) | 稳定 | |
折半插入排序 | O(n^2) | O(1) | 稳定 | 时间效率比直接插入排序要好 |
希尔排序 | O(n(logn)^2),底数为2 | O(1) | 不稳定 | |
归并排序 | O(nlogn),底数为2 | O(n) | 稳定 | 空间复杂度较高 |
桶式排序 | O(k+n) | O(k+n) | 稳定 | 待排序数据的范围在0~k之间,只能为整形序列 |
基数排序 | 稳定 | 依赖子关键字排序算法,子关键字排序算法必须是稳定的 |
关于稳定性的更深入分析,可以参考: