Python实现桶排序

如果在对给定的一些数据进行排序的时候,给定的被排序的数据存在某种特征的时候,我们就可以利用这种特征,设计出相应的排序算法,以达到加快排序速度的目的。

而假设要排序的数组的每个元素的取值在一个区间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被放入桶里的时候,他们在桶里就是排序的。由此将所有的元素都分配放入到对应的桶里的状态是:

Python实现桶排序_第1张图片

添加图片注释,不超过 140 字(可选)

而为了实现所有元素的排序,我们只要从头遍历每一个桶,并且取出桶里的元素链条,将所有的链条依次相连即可。

使用python实现的代码如下:

import numpy
def insertion_sort(array,a):
	i=0
	while ia:
			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

你可能感兴趣的:(算法,数据结构,python,排序算法)