归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。原理如下图所示:
归并排序包含分解和归并两个步骤,先写归并代码:
def guibin(l,low,high):
mid=(low+high)//2
i=low
j=mid+1
temp=[]
while i<=mid and j<=high:
if l[i]>l[j]:
temp.append(l[j])
j+=1
else:
temp.append(l[i])
i+=1
while i<=mid:
temp.append(l[i])
i+=1
while j<=high:
j+=1
l[low:high+1]=temp ##不直接赋值是因为后面要做递归
return l
分解代码
def fenjie(l,low,high):
if low<high:
mid=(high+low)//2
fenjie(l,low,mid)
fenjie(l,mid+1,high)
最后再归并:
最后代码如下:
n=int(input())#输入列表长度
l=list(map(int,input().split()))##输入所需要的列表
def guibin(l,low,high):
mid=(low+high)//2
i=low
j=mid+1
temp=[]
while i<=mid and j<=high:
if l[i]>l[j]:
temp.append(l[j])
j+=1
else:
temp.append(l[i])
i+=1
while i<=mid:
temp.append(l[i])
i+=1
while j<=high:
j+=1
l[low:high+1]=temp ##不直接赋值是因为后面要做递归
return l
def fenjie(l,low,high):
if low<high:
mid=(high+low)//2
fenjie(l,low,mid)
fenjie(l,mid+1,high)
guibin(l,low,high)##最后进行归并
fenjie(l,0,n-1)
print(l)