为什么这个 python 合并排序的实现不起作用?

Why doesn't this python implementation of mergesort work?

当我输入 [8,7,6,5,4,3,2,1] 时,输出是 => [4, 3, 2, 1, 8, 7, 6, 5]

似乎与工作解决方案(比较 here)唯一不同的是,我有一个正在递增的 k 变量,而不是 sorted 列表,并更新 arr[k] 代替 sorted

为什么这不起作用?更新 arr[k] 是如何工作的?更新原始输入数组似乎会丢失数据。

def mergesort(arr):
    if len(arr) == 1:
        return

    else:
        mid = len(arr)/2
        left = arr[0:mid]
        right = arr[mid:len(arr)]

        sorted = []
        i = 0
        j = 0
        mergesort(left)
        mergesort(right)

        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                sorted.append(left[i])
                i += 1
            else:
                sorted.append(right[j])
                j += 1

        while i < len(left):
            sorted.append(left[i])
            i += 1

        while j < len(right):
            sorted.append(right[j])
            j += 1

        return sorted

你应该在排序后分配给左右变量 return 排序后的列表 在基本情况下你应该 return 一个列表并使用 // 作为整数师检查此代码

def mergesort(arr):
    if len(arr) == 1:
        return arr

    else:
        mid = len(arr)//2
        left = arr[0:mid]
        right = arr[mid:len(arr)]

        sorted = []
        i = 0
        j = 0
        left = mergesort(left) #left is now sorted
        right = mergesort(right)

        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                sorted.append(left[i])
                i += 1
            else:
                sorted.append(right[j])
                j += 1

        while i < len(left):
            sorted.append(left[i])
            i += 1

        while j < len(right):
            sorted.append(right[j])
            j += 1

        return sorted

print (mergesort([8,7,6,5,4,3,2,1,3]))