最后更新于
最后更新于
内排序, 比较算法总结
内排序, 非比较算法总结
计数排序
对输入是0到之间的整数进行排序, 用于小范围的排序, 如0到100之间的排序. 由于计数排序不是比较排序, 排序的速度快于任何比较排序算法.
由于用来计数的数组C的长度取决于待排序数组中数据的范围.
桶排序
桶排序是计数排序的变种, 把计数排序中相邻的个小桶放到一个大桶中. 在分完桶后, 对每个桶进行排序(例如快排), 然后合并成最后的结果.
桶排序假设序列由一个随机过程产生, 该过程将元素均匀而独立地分布在区间[0,1)上(即提前知道范围). 我们把区间[0,1)划分成n个相同大小的子区间, 称为桶. 将n个记录分布到各个桶中去. 如果有多于一个记录分到同一个桶中, 需要进行桶内排序. 最后依次把各个桶中的记录列出来记得到有序序列.
基数排序
基本思想为: 将待排数据中的每组关键字依次进行桶分配. 例子见下面的连接.
另外, 基数排序是稳定的. 注意要保持稳定, 在桶分配完毕后, 对原数组的遍历需要从后向前进行.
关于非比较排序的资料参考:
桶排序的平均时间复杂度为线性的, 为桶内快排的时间复杂度. 如果相对于同样的N, 桶数量M越大, 其效率越高, 最好的时间复杂度达到(即计数排序). 桶排序的空间复杂度为. 此外, 如果桶内的排序算法是稳定算法, 桶排序就是稳定的.
基数排序的性能比桶排序要略差, 每一次关键字的桶分配都需要的时间复杂度, 而且分配之后得到新的关键字序列又需要的时间复杂度(每一次的的关键字都有可能不同). 假如待排数据可以分为个关键字, 则基数排序的时间复杂度将是. 空间复杂度为, 为桶的数量.
排序方法
平均时间
最好时间
最差时间
空间复杂度
是否稳定
冒泡
稳定
插入
稳定
希尔
,估计
-
-
不稳定
快速
不稳定
归并
稳定
堆
不稳定
排序方法
平均时间
空间复杂度
是否稳定
计数排序
不稳定
桶排序
视桶内排序算法而定
基数排序
稳定