我知道它不正确,我发现another method没有无限数字,但我仍然想知道是否可以使用无限数字来纠正它。
def MergeSort(A):
if len(A) > 1:
mid = len(A) / 2
left = A[0:mid]
right = A[mid:]
MergeSort(left)
MergeSort(right)
w = float("inf")
left.append(w)
right.append(w)
i,j = 0,0
for k in range(len(A)):
if left[i] <= right[j]:
A[k] = left[i]
i += 1
else:
A[k] = right[j]
j += 1
答案 0 :(得分:0)
问题出在for k in range(len(A)):
循环中;如果您已用尽left
中的所有值,但right
中仍有值(或反之亦然),会发生什么?
链接方法添加一个基本上看起来像
的测试if (left still has values) and ((right has no values) or (next_left < next_right)):
take a value from left
上面的代码改为添加一个保护值,确保如果你在左保护值上,它保证大于任何非保护权限值(反之亦然)。在for
循环停止之前都是如此,左侧和右侧各自仅包含保护值。
另一个选项as seen here是循环,直到左或右用尽,然后有后续循环来收集剩余的值。