def MergeSort(A,p,r):
if p<r:
q=int((p+r)/2)
MergeSort(A,p,q)
MergeSort(A,q+1,r)
Merge(A,p,q,r)
return A
def Merge(A,p,q,r):
n1 = q-p+1
n2 = r-q
L = []
R = []
for i in range(n1):
L.append(A[p+i-1])
for j in range(n2):
R.append(A[q+j])
L.append(float("inf")) #设置两个哨兵
R.append(float("inf"))
i=0
j=0
for k in range(p-1,r): #python 下标从零开始,故p-1
'''
当一个数组全部排完时,其比较的值为正无穷,此时会把另一个数组剩下的依次插入,
又通过for循环次数的限制,保证不会多插入一个正无穷进入数组
'''
if L[i] <= R[j]:
A[k] = L[i]
i=i+1
else:
A[k] = R[j]
j=j+1
return A

本文详细介绍了归并排序算法的实现原理及步骤。通过递归将数组分成更小的部分进行排序,然后合并这些部分得到完全排序的数组。文章提供了Python实现代码,并解释了如何通过比较左右子数组元素来完成合并过程。
3259

被折叠的 条评论
为什么被折叠?



