什么是桶排序

首先说一下桶排序的桶是什么概念,这里的“桶”是一个区间范围,里面可以承载一个或多个元素。桶排序的第一步就是确定桶的个数和区间。具体的建立多少个桶、每个桶的区间范围是多少,有不同的方式,我们这里使用桶的数量等于原始数列的元素的数量(为什么等于数列的数量,后面会讲到)。除了最后的一个桶只包含最大值,其他的值分散在其他桶里。
区间跨度 = (最大值-最小值)/ (桶的数量 - 1)第二步是把原始数列的元素放入桶中第三步是桶内的元素进行排序第四步就是遍历所有的桶,输出元素0.5,0.84,2.18,3.25,4.5  上面是思路,具体代码如下:def sortBucket(array):
max = array[0]
min = array[0]
for i in array:
if max < i:
max = i
if min > i:
min = i
# 1.初始化桶
bucketNumber = len(array)
bucketArray = []
for i in range(bucketNumber):
t = [] bucketArray.append(t)
# 2.数列的元素放入桶
for i in array: index = int((i - min) / (max - min) * (bucketNumber - 1)) bucketArray[index].append(i)
# 3.桶内的元素排序
for i in array: bucketArray[i].sort()
# 4.返回排好序的集合
sortedArray = [] for bucket in bucketArray:
for element in bucket:
sortedArray.append(element) return sortedArrayif name == ‘main’: array = [3, 3, 3, 7, 9, 1, 7, 1, 3, 4] bucketArray = sortBucket(array) print(bucketArray)
这里有一个不是非常明白的地方,就是 第二步中数列元素放入桶,计算index的算法:当前差值/全局差值*数列的长度减一(按照比例定位),在网上也看了其他的文章,有的文章里计算index的算法直接是:当前差值/数列长度。然后,我代入了几个元素,发现,还是前者的算法计算出来的下标更加精确。

猜你喜欢

转载自blog.csdn.net/m0_64455178/article/details/122473614