"""
sort()中使用的就是这种排序,将排序两两分组
例如16个数,先 8 8分,8再分4 4 4再分2 2 ,此时2开始排序,再2 2 合并到4 ,然后4 4 排序,最后归并
"""
def merch_sort(li,low,mid,high):
i=low #合并后排序位置中最左边的
j=mid+1 #合并后,后面列表中的第一个位置
ltmp=[] #新建一个列表,所以空间复杂度与其他排序有所不同 O(n)
while i<=mid and j<=high:
if li[i]<=li[j]: #左边的第一个小于右边的第一个
ltmp.append(li[i])
i+=1
else:
ltmp.append(li[j])
j+=1
#由于总有一边的序列先排序完成,所以要独自对后面的数进行排序
while i<=mid:
ltmp.append(li[i])
i+=1
while j<=high:
ltmp.append(li[j])
j+=1
#最后把列表放会原列表中
li[low:high+1]=ltmp
return li
def mergesort(li,low,high):
if low<high:
mid=(low+high)//2
mergesort(li,low,mid)
mergesort(li,mid+1,high)
merch_sort(li,low,mid,high)
# li=[2,3,5,7,1,4,8,9]
# print(merch_sort(li,0,3,7))
li=[1,6486,46,1651,65,165,15,132148,746,43,135,1,53]
print(mergesort(li,0,len(li)-1))
print(li)
算法吧-归并排序
最新推荐文章于 2024-07-14 19:56:17 发布