各种排序算法总结
排序算法 | 插入排序 | 冒泡排序 | 选择排序 | 归并排序 | 快速排序 | 堆排序 | 计数排序 | 基数排序 | 桶排序 |
思想 | 构建有序序列 | 两两交换 | 每次找一个最小值 | 分治法思想 | 分治法思想 | 最小堆、最大堆 | 数字本身的属性 | 对数据选择多种基数 | 函数的映射关系、Hash |
数据结构 | 数组 | 数组 | 数组 | 数组 | 不定 | 数组 | 数组 | 数组 | 数组 |
最差时间复杂度 | O(n^2) | O(n^2) | O(n^2) | O(n*lgn) | O(n^2)、改进O(n*lgn) | O(n*lgn) | O(n+k) | O((n+k)*d) | O(n^2) |
最优时间复杂度 | O(n) | O(n^2)、改进O(n) | O(n^2) | O(n*lgn) | O(n*lgn) | O(n*lgn) | O(n+k) | O((n+k)*d) | O(n) |
平均时间复杂度 | O(n^2) | O(n^2) | O(n^2) | O(n*lgn) | O(n*lgn) | O(n*lgn) | O(n+k) | O((n+k)*d) | O(n) |
最差空间复杂度 | 总共 O(n) ,需要辅助空间O(1) | 总共 O(n) ,需要辅助空间O(1) | 总共 O(n) ,需要辅助空间O(1) | О(n) | Ω(n)额外空间 | 总共 O(n) ,需要辅助空间O(1) | O(n+k) 额外空间,k为序列中Max-Min+1 | O(n) 额外空间 (K为特征个数) | O(k) 额外空间 |
稳定性 | 稳定 | 稳定 | 不稳定 | 稳定 | 不稳定 | 不稳定 | 稳定 | 稳定 | 稳定 |
空间复杂度:
In-place sort(不占用额外内存或占用常数的内存):插入排序、选择排序、冒泡排序、堆排序、快速排序。
Out-place sort:归并排序、计数排序、基数排序、桶排序。
稳定性:
stable sort:插入排序、冒泡排序、归并排序、计数排序、基数排序、桶排序。
unstable sort:选择排序、快速排序、堆排序。
比较排序:常见的排序算法都是比较排序。非比较排序:计数排序、基数排序和桶排序。
计数排序:待排序的数组元素都是整数,适合数据分布集中的排序。
基数排序:每位的排序是计数排序;桶排序:输入数组的元素都在[0,1)之间。
比较排序的时间复杂度通常为O(n2)或者O(n*lgn),比较排序的时间复杂度下界就是O(n*lgn);而非比较排序的时间复杂度可以达到O(n),但是需要额外的空间开销。