1.定义:
排序(sort)是将一组数据按照一定的规则来进行排列,一般按照递增或递减的顺序来进行排列,排序算法是一种基本的算法。
2.排序算法的分类
3.排序算法的优劣
如何判断排序算法的优劣:
- 计算的复杂度:为了全面考虑,往往从最差、平均和最好三种情况进行评价。
- 系统资源的占用:主要包括内存及其他资源的占用。一个好的排序应该占用少的内存资源。
4.排序算法的复杂度
排序方式 | 时间复杂度 | 空间复杂度 空间 | 稳定性 | ||
平均时间 | 最好时间 | 最坏时间 | |||
冒泡排序算法 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定排序 |
快速排序算法 | O(nlogn) | O(nlogn) | O(n^2) | O(logn) | 非稳定排序 |
选择排序算法 | O(n^2) | O(n^2) | O(n^2) | O(1) | 非稳定排序 |
堆排序算法 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 非稳定排序 |
插入排序算法 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定排序 |
希尔排序算法 | O(n^3/2) | O(n^2) | O(1) | 非稳定排序 | |
合并排序算法 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定排序 |
各种渐近时间复杂度由小到大的顺序如下:
常数阶O(1) < 对数阶O(logn) < 线性阶O(n) < 线性对数阶O(nlogn) < 平方阶O(n^2) < 立方阶O(n^3) <K次方阶O(n^k)< 指数阶O(2^n)
5.稳定排序算法
稳定排序算法主要依照相等的关键字维持记录的相对次序来进行排序。
如,对于有两个相等关键字的数据D1和D2,在待排序的数据中D1出现在D之前,在排序过后的数据中D1也在D2之前,那么这就是一个稳定排序算法。
冒泡排序、插入排序和合并排序算法都是稳定排序。
而选择排序、希尔排序、快速排序和堆排序都不是稳定排序算法。