思路
- 将整个待排序序列划分成多个不可再分的子序列,每个序列只含一个元素
- 将子序列两两合并,合并过程中完成排序操作
代码
def merge_sort(arr,p,q)
if len(arr)==1 or p>=q #递归出口
return
mid=(p+q)//2
merge_sort(arr,p,mid)
merge_sort(arr,mid+1,q)
merge(arr,p,mid,q)
def meige(arr,p,mid,q)#合并子序列
numL=mid-p+1
numR=q-mid
leftarr=arr[p-1:mid]
rightarr=arr[mid:q]
#给两边列表结尾加上极大值
leftarr.append(float('inf'))
rightarr.appenf(float('inf'))
k=p
while k<=q
if leftarr[i]<=rightarr[j]:
arr[k-1]=leftarr[i]
i=i+1
else:
arr[k-1]=rightarr[j]
j=j+1
k=k+1