桶排序的含义就是讲数字按大小分入桶中然后按序取出。
解释可以如下:
假如有数组arr=[1,2,3,10,20,6,70,9]
内有八个数 我们可以分配4个桶也可以分配8个桶,数字较少时我们可以分配数目较多的桶,数字较多的时候分配较少的桶,减少对空间的消耗。
桶的范围是根据最大最小值来确立的即我们需要首先遍历一遍。
def bucketSort(arr,bucketnumber):
#在此不考虑只有1个数或没有数字的情况
maxnum=arr[0]
minnum=arr[0]
for i in range(1,len(arr)):
if minnum>arr[i]:
minnum=arr[i]
elif maxnum<arr[i]:
maxnum=arr[i]
else:
continue
bucketrange=(maxnum-minnum+1)//bucketnumber#求出桶数(取整数 不会四舍五入)
buckets=[[]for i in range(bucketnumber)]#定义桶数的空间代码效果为:[[], [], [], [], []]
for i in range(len(arr)): # 将各个数分配到各个桶
buckets[(arr[i] - minnum) // bucketrange].append(arr[i])#append就是插入数组中,桶的编号是012
for i in range(bucketnumber): # 桶内排序,可以使用各种排序方法
buckets[i].sort() #sort是自带的升序排序
result=[]#定义一个结果数组来存储结果
for i in range(len(buckets)):
for j in range(len(buckets[i])):
result.append(buckets[i][j])
return result
numlist = [11,34,23,56,8,20,66,45,54,87,78]
print(bucketSort(numlist,5))