如果在对给定的一些数据进行排序的时候,给定的被排序的数据存在某种特征的时候,我们就可以利用这种特征,设计出相应的排序算法,以达到加快排序速度的目的。
而假设要排序的数组的每个元素的取值在一个区间0,1之间随机分布,那么就可以利用桶排序来加快排序速度。
因为我们知道所有元素都处于区间0,1,于是就可以把该区间平均分成10块:
添加图片注释,不超过 140 字(可选)
如果假设当前要排序的数组元素是如下:
添加图片注释,不超过 140 字(可选)
然后接下来就要根据元素值来判断需要将该元素放入至那个桶里面,例如,数值0.78就需要放置于区间0.7-0.8之间,因此放入第八个桶里,数组0.12和0.17属于区间0.1-0.2之间,应该落入到第二个桶里。需要注意的是,在将数组放入对应的桶里的时候,一定要保持排序状态,也就是说0.12和0.17被放入桶里的时候,他们在桶里就是排序的。由此将所有的元素都分配放入到对应的桶里的状态是:
添加图片注释,不超过 140 字(可选)
而为了实现所有元素的排序,我们只要从头遍历每一个桶,并且取出桶里的元素链条,将所有的链条依次相连即可。
使用python实现的代码如下:
import numpy
def insertion_sort(array,a):
i=0
while i<len(array):
if array[i]>a:
break
array.insert(i,a)
def bucket_sort(A):
bucket_list = []
bucket_count= len(A)
for i in range(bucket_count+1):
bucket_list.append([])
for a in A:
bucket_num=math.floor(bucket_count*a)
buckets = bucket_list[bucket_num]
insertion_sort(buckets,a)
sort_array=[]
for bucket in bucket_list:
if len(bucket)>0:
sort_array.extend(bucket)
return sorted_array