主要考察分治模式,分解,解决,合并
主要是下标的问题,别的挺简单的
python代码:
def Merge(A,p,q,r):
n1 = q-p+1 #to be sorted
n2 = r-q
L = [0]*(n1+1)
R = [0]*(n2+1)
for i in range(n1):
L[i] = A[p+i]
L[-1] = float('inf')
for j in range(n2):
R[j] = A[q+j+1]
R[-1] = float('inf')
i = 0
j = 0
for k in range(p,r+1):
if L[i]<=R[j]:
A[k]=L[i]
i+=1
else:
A[k]=R[j]
j+=1
def MergeSort(A,p,r):
if p<r:
q=(p+r)//2
MergeSort(A,p,q)
MergeSort(A,q+1,r)
Merge(A,p,q,r)
B = [0,2,4,1,3,5]
Merge(B,0,2,5)
print(B)
A=[0,1,2,3,6,8,4,7,9]
# 0-p is already sorted
MergeSort(A,p=3,r=8)
print(A)