我需要使用Python3实现合并排序。我把它编码了。但它没有给出正确的输出。有人能检查一下吗? 这是我的密码
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)
def Merge(A, p, q, r):
i = 1
j = q+1
k = 0
TEMP = [0] * (r+1)
while i <= q and j <= r:
if A[i] <= A[j]:
TEMP[k] = A[i]
k += 1
i += 1
else:
TEMP[k] = A[j]
k += 1
j += 1
if (j > r) :
for t in range(0, q-1):
A[r-t] = A[q-t]
for t in range(0, k-1):
A[p+t] = TEMP[t+1]
A = [15, 16, 13, 10, 19, 18]
mergeSort(A, 0, len(A)-1)
print(A)
多谢各位
您执行合并的方式(对我来说)看起来很奇怪,但我会纠正您到目前为止的错误
1-i的初始化值错误,应为:
因为我是数组A中的第一个元素
2-临时数组大小的初始化值错误,应为:
3-填充临时数组和/或替换数组元素时似乎有错误,以下是修复代码。我在first while循环之后写了一篇关于该部分的评论,以指出在那个时候需要做什么
错误在
Merge()
函数中i=p
和非i=1
i<q
或j<r
。我们也需要适应这些情况李>TEMP
的大小不正确。已更正的合并功能:
注意:请尝试使用更有意义的变量名
相关问题 更多 >
编程相关推荐