1希尔排序
import random
def insert_sort_gap(li,gap):
for i in range(gap,len(li)):
temp=li[i]
j =i -gap
while j >=0 and li[j]>temp:
li[j+gap]=li[j]
j-=gap
li[j+gap]=temp
return li
def shell_sort(li):
d=len(li)//2
while d>=1:
insert_sort_gap(li,d)
d//=2
return li
li=[random.randint(0,100) for i in range(100)]
print(li)
print(shell_sort(li))
2.计数排序
import random
def count_sort(li,max):
count=[0 for _ in range(max+1)] #建立空列表
for val in li:
count[val]+=1 #对每个数字出现的次数进行计数
li.clear()
print(count)
for ind,val in enumerate(count): #遍历所存数据,val是ind出现的次数
for i in range(val):
li.append(ind)
li=[random.randint(0,10) for i in range(100)]
print(li)
count_sort(li,10)
print(li)
3.桶排序
def bucket_sort(li,n,maxnum):
buckets=[[] for _ in range(n)] #创建桶
for val in li:
i=min(val//(maxnum//n),n-1) #确定数字所在的桶号数
buckets[i].append(val)
for j in range(len(buckets[i])-1,0,-1): #对每个桶内进行冒泡排序 从右往左冒泡
if buckets[i][j]<buckets[i][j-1]:
buckets[i][j],buckets[i][j-1]=buckets[i][j-1],buckets[i][j]
else:
break
li.clear()
for buc in buckets:
li.extend(buc)
return li
import random
li=[random.randint(0,100) for i in range(1000)]
print(li)
bucket_sort(li,10,100)
print(li)
4.基数排序
def rdix_sort(li):
max_num=max(li)
it=0
while 10**it <=max_num: #确定循环次数
buckets=[[]for _ in range(10)] #建桶
for val in li: #遍历
dig=(val//10**it)%10 #确定每个数放在哪个桶里
buckets[dig].append(val)
li.clear()
for buc in buckets: #把数重新取出
li.extend(buc)
it+=1
import random
li=[random.randint(0,10000) for i in range(1000)]
print(li)
rdix_sort(li)
print(li)