选择排序方法所需要考虑因素:
- 时间复杂度
- 空间复杂度
- 算法稳定性
- 算法简单性
- 待排序记录数n的大小
- 待排序记录本身信息量的大小
- 待排序记录关键字的分布情况
各排序时间复杂度及空间复杂度的比较:
排序方法 | 平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 辅助空间复杂度 | 算法稳定性 | 算法简单性 |
---|---|---|---|---|---|---|
直接插入排序 | 稳定 | 简单 | ||||
希尔排序 | 不稳定 | 改进 | ||||
冒泡排序 | 稳定 | 简单 | ||||
快速排序 | 不稳定 | 改进 | ||||
简单选择排序 | 不稳定 | 简单 | ||||
堆排序 | 不稳定 | 改进 | ||||
归并排序 | 稳定 | 改进 | ||||
基数排序 | 稳定 |
对于待排记录数n:n越小简单排序方法越合适;n越大改进排序方法越合适。
对于待排记录本身信息量大小:对改进排序算法影响不大;对于简单排序算法,信息量越大对简单选择排序算法越有利,对其他两种不利。
对于待排记录关键字的分布情况:
- 当待排记录数n较大,关键字分布比较随机,且对稳定性不做要求时:快速排序;
- 当待排记录数n较大,内存空间允许,且要求排序稳定时:归并排序;
- 当待排记录数n较大,关键字分布可能出现正序或者逆序的情况,且对稳定性不做要求时:堆排序或归并排序;
- 当待排记录数n较大,而只要找出最小的前几个记录时:堆排序或简单选择排序;
- 当待排记录数n较小,记录已基本有序,且要求稳定时:之间插入排序;
- 当待排记录数n较小,且记录含有数据项较多,所占存储空间较大时:简单选择排序。