问题描述
归并排序是一个典型的分治算法。
代码实现:
def mergeSort(list,start,end): #i节点的子节点为2i+1,2i+2
if end>start:
mid=(start+end)//2
mergeSort(list,start,mid)
mergeSort(list,mid+1,end)
merge(list,start,end)
def merge(list,start,end):
mid=(start+end)//2
l=list[start:mid+1]
r=list[mid+1:end+1]
index_l,index_r,index=0,0,0
while(index_l<len(l) and index_r<len(r)):
if l[index_l]<r[index_r]:
list[start+index]=l[index_l]
index_l+=1
else:
list[start + index] = r[index_r]
index_r+=1
index+=1
if index_l==len(l):
list[end-(len(r)-index_r)+1:end+1]=r[index_r:]
if index_r==len(r):
list[end-(len(l)-index_l)+1:end+1]=l[index_l:]
list=[11,2,3,4,12,18,16]
mergeSort(list,0,len(list)-1)
print(list)