最常用的排序算法:
冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。
按照时间复杂度可分为三类:
| 排序算法 | 时间复杂度 | 是否基于比较 |
|---|---|---|
| 冒泡、插入、选择 | O(n2) | Y |
| 快排、归并 | O(nlogn) | Y |
| 桶、计数、基数 | O(n) | N |
一般从这几个方面来衡量:
1. 最好情况、最坏情况、平均情况时间复杂度
要分别给出最好情况、最坏情况、平均情况下的时间复杂度,并说出最好、最坏时间复杂度对应的要排序的原始数据是什么样的。
区分这三种时间复杂度的目的:
2. 时间复杂度的系数、常数 、低阶
时间复杂度反应的是数据规模 n 很大的时候的一个增长趋势,它会忽略系数、常数、低阶。
但排序的是 1000 以内规模很小的数据,对同阶时间复杂度的排序算法性能对比的时候,应当把系数、常数、低阶也考虑进来。
3. 比较次数和交换(或移动)次数
基于比较的排序算法的执行过程,会涉及元素比较大小和元素交换或移动两种操作。
在分析排序算法的执行效率的时候,应该把比较次数和交换(或移动)次数也考虑进去。