概述
桶排序示意图(当然这里只是简单的示例,真正的桶排序比这个复杂):
维基百科介绍: 桶排序
实现思路:
1. 设置固定空桶数
2. 将数据放到对应的空桶中
3. 将每个不为空的桶进行排序
4. 拼接不为空的桶中的数据,得到结果
简单示例:
算法分析:
时间复杂度:
1. 将数据装入桶,需要N次循环
2. 之后排序,需要M次循环
3. 假设使用比较先进的排序算法,需要时间复杂度为O(N*logN)
4. 平均时间复杂度为线性的O(N+C),其中C=N*(logN-logM)
5. 最小时间复杂度O(N),此时 M=N
空间复杂度:
M个桶的额外空间,以及N个元素的额外空间,O(N+M)
稳定性:
一般来说桶排序是稳定的
算法优化:
1. 桶排序的优化需要从排序上下功夫,尽量做到如下两点
2. N个数都符合均匀分布,每一个桶中有N/M个数据
3. 尽量的增大桶的数量,极限情况下每个桶只能得到一个数据,但是会增加空间复杂度
特点总结:
1. 桶排序是稳定的
2. 桶排序是常见排序里最快的一种,比快排还要快…(大多数情况下)
3. 桶排序非常快,但是同时也非常耗空间,(基本上是最耗空间的一种排序算法)
注意事项
桶排序是一个简单快速的排序,需要新建一个 大范围的数组,即Buckets,因此桶排序有其局限性,适合元素值集合并不大的情况。