定义
- 将数组元素的范围划分为几个子范围(桶子),再对每个桶子里所有元素进行排序,最后合并桶子。
算法模型
- 根据数组中元素的范围,来合理划分筒子个数
- 将各个数组元素放入桶子里
- 对每个桶子里元素进行排序
- 合并桶子里的数据
伪代码
Bucket-Sort(A)
let B[0..n-1] be a new array
n = A.lenghtS
for i = 0 to n - 1
make B[i] an empty list
for i = 1 to n
insert A[i] into list B[nA[i]]
for i = 0 to n - 1
sort list B[i] with insertion sort
concatenate the lists B[0], B[1]....B[n - 1] togather in order
例子
数组 array = [29, 25, 3, 49, 9, 37, 21, 43];最大数是49.划分五个范围
0~9、10~19、20~29、30~39、40~49,将元素放入桶子
对桶子里元素进行排序这里选择插入排序。(放入的同是可进行插入)最后,将各个桶中的数据有序的合并起来。
复杂度分析
- 很显然桶排序的时间复杂度,取决与对各个桶之间数据进行排序的 时间复杂度,因为 其它部分的时间复杂度都为O(n);很显然,桶划分的越小,各个桶之间的数据越少,排 序所用的时间也会越少。但相应的空间消耗就会增大。