归并排序的平均时间复杂度为O(nlogn),属于稳定排序。
def merge_sort(a,b):
"""输入:已排序好的短序列a,b
输出:排序好的长序列
"""
p1=p2=0
c = []
while p1<=len(a)-1 and p2<=len(b)-1:
if a[p1]<=b[p2]:
c.append(a[p1])
p1 +=1
else:
c.append(b[p2])
p2 +=1
while p1<= len(a)-1: #也可以采用if p1<= len(a)-1: c.extend(a[p1:])
c.append(a[p1])
p1 +=1
while p2<= len(b)-1:
c.append(b[p2])
p2 +=1
return c
def merge(lists):
if len(lists)<=1:
return lists
midd = len(lists)//2
left = merge(lists[:midd])
right = merge(lists[midd:])
return merge_sort(left,right)