4.9 桶排序

Posted 极夜编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.9 桶排序相关的知识,希望对你有一定的参考价值。

4.9 桶排序

 

桶排序(Bucket Sort)

4.9 桶排序

4.9 桶排序

4.9 桶排序

当数列取值范围过大或者不是整数时,就不适用计数排序。但是可以利用桶排序来解决。

桶排序同样是一种线性时间的排序算法,类似于计数排序所创建的统计数组,桶排序需要创建若干个”来协助排序。

桶排序是计数排序的扩展版本计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素

每一个桶(bucket)代表一个区间范围,里面可以承载一个或多个元素。通过划分多个范围相同的区间,将每个子区间自排序,最后合并。桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效

4.9 桶排序


算法分析

假设原始数列有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 桶排序的主要内容,如果未能解决你的问题,请参考以下文章

线性排序:桶排序计数排序

桶排序和基数排序

排序算法——桶排序

排序5:桶排序

图解排序 8/10 - 桶排序

java实现桶排序