def x1(a):#自定义求数组最小值
x2=a[0]
for i in a:
if x2>i:
x2=i
return x2
def x2(a):#自定义求数组最大值
x1=a[0]
for i in a:
if x1<i:
x1=i
return x1
def quick_sort(a):
length=len(a)
if length==1 or length ==0:
return a
else:
tmp,i=1,0
while i+tmp<length:
if a[i]>a[i+tmp]:
target=a[i+tmp]
for j in range(i+tmp-1,i-1,-1):
a[j+1]=a[j]
a[i]=target
i+=1
else:
tmp+=1
return quick_sort(a[:i])+[a[i]]+quick_sort(a[i+1:])
def bucket_sort(a):
x3,x4=x1(a),x2(a)
length=len(a)
bucket_num=length//100+1#这里+1是使其最小不为0,以便下一句中做除数
bucket_range=(x4-x3)/bucket_num#定义一个桶所盛放的数值范围的长度
if bucket_range:
b=[]
for i in range(bucket_num+1):#这里说明了实际桶的个数为bucket_num+1,最后一个桶用来盛放最大数x4
b.append([])
for i in a:
b[int((i-x3)/bucket_range)].append(i)#将每个数字放入桶中
for j in range(bucket_num+1):
b[j]=quick_sort(b[j])#对每个桶中的数字进行快速排序
return [i for j in range(bucket_num+1) for i in b[j]]#将所有桶中的数字连接在一起
else:
return a
a=[]
import random,time
for i in range(eval(input())):
a.append(random.randint(0,1000000))#生成自定义个随机数加入到数组
if __name__=="__main__":
start=time.time()
bucket_sort(a)
end=time.time()
print(end-start)#计时
实测结果如下
100000#输入
0.47315502166748047#输出