排序算法

Jun 24, 2015

版权声明:本文为博主原创,未经作者许可谢绝转载。
如有任何疑问或者建议,请联系 xiangchen.cs@gmail.com

通用排序算法

算法 平均复杂度 最坏情况复杂度 最好情况复杂度 稳定性 其他
冒泡 $O(n^2)$ $O(n^2)$ $O(n)$ 稳定  
选择 $O(n^2)$ $O(n^2)$ $O(n^2)$ 不稳定 性能与初始状态无关
直接插入 $O(n^2)$ $O(n^2)$ $O(n)$ 稳定  
折半插入 $O(n^2)$ $O(n^2)$ $O(n\log n)$ 稳定  
希尔   $O(n^2)$ $O(n\log n)$ 不稳定 需要选择步长
快速 $O(n\log n)$ $O(n^2)$ $O(n\log n)$ 不稳定 对于有序序列性能变差
锦标赛 $O(n\log n)$ $O(n\log n)$ $O(n\log n)$ 稳定 大量附加存储
$O(n\log n)$ $O(n\log n)$ $O(n\log n)$ 不稳定 原地操作
归并 $O(n\log n)$ $O(n\log n)$ $O(n\log n)$ 稳定 $O(n)$附加空间

特殊情形排序算法

有限取值的序列:计数排序:$O(n)$

取值有范围的序列:箱排序:$O(n)$

排序关键字分解:基数排序:$O(nd)$

外部排序

如果排序对象数量巨大,无法全部调入内存,则需要进行外部排序。

归并排序是用于实现外部排序的主要策略