vlambda博客
学习文章列表

算法之排序算法——桶排序

一、基本思想


划重点:划分多个范围相同的区间,每个区间自排序,最后合并。


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

桶排序保证每个桶存储一定范围,通过映射函数,将待排序数组中的元素映射到各个对应的桶中。

取值范围要合理保证元素分布均匀。

对每个桶中的元素进行排序,最后将桶合并,完成有序排列。


二、图解过程


a、待排序序列

b、划分到五个桶


算法之排序算法——桶排序

c、里自排序

d、合并,完成有序序列


三、核心代码


#待排序序列list = [24,5,37,52,69,55,8,6,44,53]#划五个桶bucket=[[],[],[],[],[]]#划分到五个桶for i in list: if i >0 and i <= 20: bucket[0].append(i) elif i >20 and i <= 40: bucket[1].append(i) elif i >40 and i <= 60: bucket[2].append(i) elif i >60 and i <= 80: bucket[3].append(i) elif i >80 and i <= 100:        bucket[4].append(i)result=[]#桶内自排序并合并,现简化用list.sort()方法#一般用快速排序法for i in bucket: i.sort() result = result+i#完成print(result)


#输出[5, 6, 8, 24, 37, 44, 52, 53, 55, 69]


四、复杂度分析


1. 时间复杂度:O(N + M)


对于待排序序列大小为 N,共分为 M 个桶

当使用快速排序算法,平均时间复杂度:

O(N)+O(M∗(N/M∗log(N/M)


2. 空间复杂度:O(N + M)


五、稳定性分析


桶排序的稳定性取决于桶内排序使用的算法。