1、几种常见排序算法的时间复杂度
排序方法 | 平均情况 | 最好情况 | 最坏情况 |
直接插入排序 | O(n2) | O(n) | O(n2) |
起泡排序 | O(n2) | O(n) | O(n2) |
快速排序 | O(nlog2n) | O(nlog2n) | O(n2) |
简单选择排序 | O(n2) | O(n2) | O(n2) |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) |
归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) |
由此可见,在最好情况下,直接插入排序和起泡排序最快;平均情况下,快速排序最快;在最坏情况下,堆排序和归并排序最快。
2、稳定性比较
稳定性算法包括:直接插入排序,起泡排序,归并排序;
非稳定性算法包括:堆排序,快速排序,简单选择排序;
3、使用情形分析
- 当待排序记录个数n较大,关键码分布较随机,且对稳定性不作要求时,宜采用快速排序
- 当待排序记录个数n较大,内存空间允许,且要求排序稳定时,宜采用归并排序
- 当待排序记录个数n较大,关键码分布可能出现正序或逆序的情况,且对稳定性不作要求时,宜采用堆排序或归并排序。
- 当待排序记录个数n较大,而只要找出最小的前几个记录,采用堆排序或者简单选择排序
- 当待排序记录个数n较小,记录已基本有序,且要求稳定,宜采用直接插入排序
- 快速排序和归并排序在待排序记录个数n值较小时的性能不如直接插入排序,因此在实际应用时,可将它们和直接插入排序“混合”使用。