import numpy as np
import random as rd
a=[rd.randint(1,100) for i in range(10)]
a=np.random.randint(1,100,10)
print(a)
生成随机数列
基数排序
非比较型的排序算法 对数据进行分桶和合并
从数列的位数从低位到高位,进行桶排序
基数排序将数据按位进行分桶,然后将桶中的数据合并。
基数排序除了用于对整数进行排序,也可以用于对浮点数、字符串进
最高位优先 最低位优先
行排序。
p=1
while max(a)>10p:
p+=1
print(p)
for i in range(p):
bucket=[[]for i in range(10)]
for n in a:
r=n//(10i)%10
bucket[r].append(n)
# print(bucket)
j=0
for k in range(10):
for n in bucket[k]:
a[j]=n
j+=1
print(a)
计数排序 稳定排序
是一种牺牲空间换取时间的排序算法。
计数排序先找到待排序列表中的最大值 k,开辟一个长度为 k+1 的计数列表,计数列表中的所有初始值都为 0。走访待排序列表, 如果走访到的元素值为 i,则计数列表中索引 i 的值加1,走访 完整个待排序列表,就可以统计出待排序列表中每个值的数量。 然后创建一个新列表,根据计数列表中统计的数量,依次在新列 表中添加对应数量的 i ,得到排好序的列表。
max_n=max(a)
buckets=[0]*(max_n+1)
for i in a:
buckets[i]+=1
l=[]
for i in range(len(buckets)):
for j in range(buckets[i]):
l.append(i)
print(l)
原生桶排序
分桶和合并实现
建立,大小值之间的空桶数量,分区间,依次把相应的值放进桶里,再对每个小桶进行排序
桶排序需要占用很多额外的空间,对桶内数据进行排序,选择哪种排序算法对于性能的影响至关重要。桶排序适用的场景并不多,用得多一点的是基于桶排序思想的计数排序和基数排序。
bucket_n=(max(a)-min(a))//3+1
buckets=[[] for i in range(bucket_n)]
for i in a:
buckets[int(i-min(a))//3].append(i)
print(buckets)
l=[]
for i in buckets:
for j in sorted(i):
l.append(j)
print(l)