python - 使用 Python 表示合并排序,如何避免 IndexError

标签 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  

最佳答案

问题出在 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 , 就是一直循环,直到左边或右边都用完,然后有后续循环收集剩余的值。

关于python - 使用 Python 表示合并排序,如何避免 IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262723/

相关文章:

python - 从 Tiff 图像中获取描述/关键字?

python - 是否可以在事件循环已在运行时运行 asyncio.Server 实例

algorithm - 更新树并跟踪某些子树节点的变化

javascript - 对数组中的非后续元素进行排序

python - python中的方法重载

python - pandas 在数据帧之间交换行

c++ - list::sort 在 msvc 中使用什么排序算法?

java - 寻找有关 trie 的良好介绍

python - python解析嵌套括号,逐级抓取内容

algorithm - 为什么在 Bellman Ford 算法中需要 (node number - 1) 次迭代来找到最短路径?