使用Python来表示merge-sort,如何避免IndexError

时间:2016-02-08 05:13:14

标签: python algorithm

我知道它不正确,我发现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  

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是循环,直到左或右用尽,然后有后续循环来收集剩余的值。