我的mergesort代码将返回相同的输入数组

时间:2018-11-05 14:07:30

标签: algorithm sorting data-structures mergesort

以下是Mergesort的代码,其中数据集设置为第一个元素。这段代码为我生成了一个与输入相同的输出数组。

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

这是我的程序的屏幕截图: This here is a screenshot to my program

1 个答案:

答案 0 :(得分:1)

代码中有两个错误:

首先,您在第14行输入错字:

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

第二,您的代码不适用于特殊输入,因为在执行合并操作时未实现<=>=情况。因此,您的代码无法对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