时间复杂度:O(nlogn)
空间复杂度O(n)
分解:将列表越分越小,直至分成一个元素
终止条件:一个元素是有序的
合并:将两个有序列表合并,列表越来越大
def merge(ls,low,mid,high):
i=low
j=mid+1
ltmp=[]
while i<=mid and j<=high: #只需要左右两边都有数
if ls[i]<ls[j]:
ltmp.append(ls[i])
i+=1
else:
ltmp.append(ls[j])
j+=1
while i<=mid:
ltmp.append(ls[i])
i+=1
while j<=high:
ltmp.append(ls[j])
j+=1
ls[low,high+1]=ltmp
def merge_sort(ls,low,high):
mid=(low+high)//2
if low<high: #至少有两个元素
merge_sort(ls,low,mid)
merge_sort(ls,mid+1,high)
merge(ls,low,mid,high)