首页 > 代码库 > 排序算法总结

排序算法总结

各种排序算法总结

 排序算法 插入排序 冒泡排序 选择排序 归并排序 快速排序堆排序 计数排序 基数排序 桶排序 
思想 构建有序序列两两交换每次找一个最小值分治法思想分治法思想最小堆、最大堆数字本身的属性 对数据选择多种基数 函数的映射关系、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),但是需要额外的空间开销。

排序算法总结