【问题标题】:My code for mergesort is returning me the same input array我的合并排序代码返回了相同的输入数组
【发布时间】:2018-11-05 14:07:30
【问题描述】:

以下是合并排序的代码,其中枢轴集作为第一个元素。这段代码正在为我生成一个与输入相同的输出数组。

Python3 代码:

def mergesort(array):
    length=len(array)
    if(length<=1):
        return (array)
    else:
        mid=length//2
        left=[]
        right=[]
        # print(mid)
        left=mergesort(array[0:mid])
        right=mergesort(array[mid:])
        # print(left, right)
        arr=merge(left,right)
        return (array)

def merge(left,right):

    # print(left, right)
    i=j=0
    # l=len(left+right)
    l1=len(left)
    l2=len(right)
    l=l1+l2
    arr=list()
    for k in range(l):
        if i == l1:
            arr.append(right[j])
            j+=1
        elif j == l2:
            arr.append(left[i])
            i+=1
        elif(left[i] > right[j]):
            arr.append(right[j])
            j=j+1
        elif (left[i] < right[j]):
            arr.append(left[i])
            i=i+1
        # print(array)
    return (arr)

array=list(map(int,input().split()))
# print(array)
print(mergesort(array))

这是我的程序的截图:

【问题讨论】:

  • merge_sort: arr=merge(left,right) 中的拼写错误然后返回array 而不是arr

标签: algorithm sorting data-structures mergesort


【解决方案1】:

代码有两个错误:

首先,第 14 行有一个错字:

def mergesort(array):
    #....
    arr=merge(left,right)
    return (arr) # Not return (array)

其次,您的代码不适用于特殊输入,因为您在执行合并操作时没有实现 &lt;=&gt;= 情况。因此,例如,您的代码无法对 2 5 3 5 进行排序。要解决这个问题:

def merge(left,right):
    # ...
    elif(left[i] > right[j]):
        arr.append(right[j])
        j=j+1
    elif (left[i] <= right[j]): # instead of <
        arr.append(left[i])
        i=i+1

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2022-01-15
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多