5、归并排序
li=[2,5,7,8,9,1,3,4,6]
def merge(li,low,mid,high):
i=low
j=mid+1
a=[]
while i<=mid and j<=high:
if li[i]<li[j]:
a.append(li[i])
i+=1
else:
a.append(li[j])
j+=1
#while 执行完肯定有一部分没数了
while i<=mid:
a.append(li[i])
i=i+1
while j<=high:
a.append(li[j])
j=j+1
li[low:high+1]=a
merge(li,0,4,8)
print(li)
快速排序,堆排序和归并排序:
时间复杂度都为O(nlogn)
运行时间:
快速<归并< 堆
6、希尔排序(每趟排序都使整体数据越来越接近有序)
import random
li=[random.randint(0,60)for i in range(6)]
print(li)
def pp(li,gap):
for i in range(gap,len(li)):#摸到的牌的下标
a=li[i]
j=i-gap#j是手里的牌的下标
while li[j]>a and j>=0:
li[j+gap]=li[j]
j=j-gap
li[j+gap]=a#插入
def shell(li):
d=len(li)//2
while d>=1:
pp(li,d)
d=d//2
shell(li)
print(li)
下一章说列表