4.9 桶排序
Posted 极夜编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.9 桶排序相关的知识,希望对你有一定的参考价值。
4.9 桶排序
桶排序(Bucket Sort)
当数列取值范围过大或者不是整数时,就不适用计数排序。但是可以利用桶排序来解决。
桶排序同样是一种线性时间的排序算法,类似于计数排序所创建的统计数组,桶排序需要创建若干个“桶”来协助排序。
桶排序是计数排序的扩展版本。计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素。
每一个桶(bucket)代表一个区间范围,里面可以承载一个或多个元素。通过划分多个范围相同的区间,将每个子区间自排序,最后合并。桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效。
算法分析
假设原始数列有n个元素,分成m个桶,平均每个桶的元素个数为n/m。
以下逐步分析算法复杂度:
1. 求数列最大最小值,运算量为n
2. 创建空桶,运算量为m
3. 遍历原始数列,运算量为n
4. 在每个桶内部做排序,由于使用了O(n*log n)的排序算法,所以总体运算量为n/m * log(n/m) * m。
5. 输出排序数列,运算量为n
因此,总的运算量为3n + m + n/m * log(n/m) * m,时间复杂度为O(n + m + n(logn - logm))。
桶排序在性能上并非绝对稳定。理想情况下,桶中元素分布均匀,当n=m时,时间复杂度可以达到O(n)。但是,如果桶内元素的分布极不均衡,极端情况下第一个桶中有n-1个元素,最后一个桶中有1个元素,此时的时间复杂度将退化为O(n*log n),还白白创建了许多空桶。
以上是关于4.9 桶排序的主要内容,如果未能解决你的问题,请参考以下文章