时间复杂性与空间复杂性的比较:
排序方法 | 最好情况 | 平均情况 | 最坏情况 | 辅助存储 | 稳定性 |
直接插入排序 | O(n) | O(![]() | O(![]() | O(1) | √ |
希尔排序 | 与增量序列有关 | × | |||
简单选择排序 | O(n) | O(![]() | O(![]() | O(1) | × |
冒泡排序 | O(n) | O(![]() | O(![]() | O(1) | √ |
快速排序 | O(![]() | O(![]() | O(![]() | O(![]() | × |
堆排序 | O(![]() | O(![]() | O(![]() | O(1) | × |
归并排序 | O(![]() | O(![]() | O(![]() | O(n) | √ |
基数排序 | O(k(n+m)) | O(k(n+m)) | O(k(n+m)) | O(n+m) | √ |
k:待排元素的位数,m为基数的个数 |
注意事项:
- 插入排序算法特别适合于输入数据基本有序的情况。
- 输入数据越有序,快速排序越慢,输入数据越无序,快速排序速度越快。
- 简单选择排序的元素比较次数与初始排列次序无关。
- 从很多个数据中查找前几个最大或者最小的数据用堆排序,例如,从10000个数中查找前10个最小的数用堆排序。
例题:
- 若对n个元素进行合并排序,则进行每一趟合并的时间复杂性为O(n)。
- 快速排序每一趟都能选出一个元素放到最终位置,并且其时间性能受数据初始特性影响。
- 直接插入排序和冒泡排序在初始数据基本有序的情况下,时间复杂性均为O(n)。