algorithm - 我的合并排序代码返回相同的输入数组

标签 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

最佳答案

代码中有两个错误:

首先,你在第 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

关于algorithm - 我的合并排序代码返回相同的输入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53156014/

相关文章:

algorithm - 通用算法和数据结构列表

algorithm - 如何在特定时间内按特定因素改变速度,同时在不同的帧率下保持一致?

algorithm - 在已排序的数组中查找已移位的元素

algorithm - 非递归 dfs(何时标记它已访问?)

python - python 中的合并排序 - 太慢?

performance - 为什么 Haskell 使用归并排序而不是快速排序?

c++ - std::sort() C++ 不工作但它很简单,为什么 :( 一维数组

java - HashMap Java 如果存在则获取值

c++ - 没有参数列表的模板名称的无效使用

algorithm - 矩形中的点