原理:
将待排序的数据分到几个有序的桶里,每个桶的数据单独排序,桶内排完序后,再按顺序依次取出,组成有序序列。
步骤:
找出序列中的最大和最小值,目的是为了确定所需桶的数量;
将数据放入相应的桶;
桶内数据进行排序,可以按照快排等算法进行排序;
桶内数据有序取出并合并成完整的有序序列。
实现代码(python):
from quick_sort import quick_sort #从快排引入快排包
def bucket_sort(alist, bucketsize):
minValue = alist[0]
maxValue = alist[1]
for i in alist:
if i < minValue:
minValue = i
elif i > maxValue:
maxValue = i
#桶数量
bucketcount = (maxValue - minValue +1) // bucketsize
#对应的桶
bucket_lists = list([] for _ in range(bucketcount))
#把数据放入相应的桶
for i in alist:
bucket_index = (i - minValue) // bucketsize
bucket_lists[bucket_index].append(i)
#桶内快排
for j in bucket_lists:
quick_sort(j, 0, len(j)-1) #这里采用的是快排,需要引入快排的包,因为篇幅原因,这里不放快排的代码
#合并数据
result = []
for j in bucket_lists:
if len(j) != 0:
result.extend(j)
return result
复杂度分析:-空间复杂度空间复杂度为O(n)
-时间复杂度–最优时间复杂度:O(n)–最坏时间复杂度:O(nlogn)–平均时间复杂度:O(n)
是否属于原地排序算法:不是一种原地排序算法
稳定性:稳定
适应范围:适应外部排序,即数据量比较大,但是数据范围比较小的排序
猜您喜欢往期精选▼1. 用Python来点高逼格的,用 python 拟合等角螺线
2.空洞卷积(dilated convolution)深入详解——优点与缺点
3. CNN中的目标多尺度处理策略汇总
4. pythonturtle绘图 绘制奥运五环 绘制18*18棋盘
5. 使用python+tkinter开发一个简单的学生管理系统
有趣的灵魂终究会相遇
好看的皮囊风干在路上
扫码即可相遇哦