内部排序算法总结
排序算法介绍
排序算法主要可以分为内部排序和外部排序,其中内部排序由可以分为非线性时间比较排序和线性时间非比较排序,前者主要通过比较来决定元素之间的相对次序,都有关键字的比较和记录的移动,其时间复杂度不能突破O(nlogn),后者不需要通过比较来进行,可以以线性时间运行。
排序算法分类
非线性时间比较排序:
插入排序:简单插入排序、折半插入排序、希尔排序
交换排序:冒泡排序、快速排序
选择排序:直接选择排序、堆排序
归并排序:二路归并排序、多路归并排序(下文未介绍)
线性时间非比较排序:
基数排序、计数排序、桶排序
不稳定排序:希尔排序、快速排序、直接选择排序、堆排序
其余为稳定排序
复杂度&&稳定性
排序算法 | 平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
简单插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
折半插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
希尔排序 | O(n^(1.3)) | O(n) | O(n^2) | O(1) | 不稳定 |
冒泡排序 | 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(n^2) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) |