python问题中的合并排序

重新开始
def mergeSort(A, l, r):
    if l < r:
        mid = (l + r) // 2
        mergeSort(A, l, mid)
        mergeSort(A, mid + 1, r)
        merge(A, l, mid, r)

def merge(arr, l, mid, r):
    arr1 = []
    arr2 = []

    for i in range(mid):
        arr1.append(arr[i])

    for j in range(mid, r):
        arr2.append(arr[j])

    i = 0
    j = 0
    k = 0

    while (i < len(arr1) and j < len(arr2)):
        if arr1[i] < arr2[j]:
            arr[k] = arr1[i]
            i += 1
        else:   
            arr[k] = arr2[j]
            j += 1
        k += 1

    while i < len(arr1):
        arr[k] = arr1[i]
        i += 1
        k += 1

    while j < len(arr2):
        arr[k] = arr2[j]
        j += 1
        k += 1


arr = [2, 9, 7, 6, 1, 8, 4, 3]
mergeSort(arr, 0, 8)

print(arr)

代码中的某处有一个小错误,我找不到请尝试在您的机器上使用不同的测试用例运行此代码。让我知道我在这里做错了什么。我不知道为什么我得到了不正确的答案:[1, 2, 3, 4, 6, 8, 9, 7]

你有索引问题。你用 C 风格编写了代码。只需使用切片即可解决您的问题

将 arr1 和 arr2 的定义(删除 arr1 和 arr2 的循环)更改为:

arr1 = arr[:mid]
arr2 = arr[mid:]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章