我在我的算法书(Intro to algorithms 3rd edition Cormen)中阅读了合并排序(就地),我决定用 Python 实现它。问题是我找不到我做错了什么......我在 C++ 中看到了一些代码,但即使这样我也无法修复它。
这是我的代码:
def MERGE(A,start,mid,end):
L=[0]*(mid - start + 1)
for i in range(len(L) - 1):
L[i] = A[start+i]
L[len(L) - 1] = 100000 # centinel, (fix)
R=[0]*(end - mid + 2)
for j in range(len(R) - 1):
R[j] = A[mid+j]
R[len(R) - 1] = 100000
i = 0
j = 0
k = start
for l in range(k,end):
if(L[i] < R[j]):
A[l] = L[i]
i = i + 1
else:
A[k] = R[j]
j = j + 1
def mergeSort(A,p,r):
if p < r:
mid = int((p+r)/2)
mergeSort(A,p,mid)
mergeSort(A,mid+1,r)
MERGE(A,p,mid,r)
A = [20, 30, 15, 21, 42, 45, 31, 0, 9]
mergeSort(A,0,len(A)]
当我运行代码时,我遇到了一些索引问题:
File "myrealmerge.py", line 9, in MERGE
R[j] = A[mid+j]
IndexError: list index out of range
我知道这是一个“愚蠢的问题”,并且有一些相关的帖子,但我尝试了那里的建议,它对我不起作用......
谁能帮我?谢谢!