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