为什么这个mergesort的python实现不起作用?

时间:2016-01-21 03:24:02

标签: python arrays sorting recursion mergesort

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

似乎唯一与工作解决方案不同的是(比较here),而不是sorted列表,我有一个k变量,我正在递增,并更新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

1 个答案:

答案 0 :(得分:2)

你应该只分配左右变量,因为你的函数在排序之后也会返回排序列表你也应该返回一个列表并使用//进行整数除法检查这段代码

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]))