合并排序不正确-Python

合并排序不正确-Python,python,mergesort,Python,Mergesort,排序不正确。有人能用这种方法帮助排序吗。另外,请告诉我哪里出了问题。我是Python新手,所以我自己做这件事。我使用的是C语言或其他语言中常用的方法 base =[5,4,3,2,1] def splitarray (low, high): if low < high: mid = (high+low)/2 splitarray (low, mid) splitarray (mid+1,high) merge(l

排序不正确。有人能用这种方法帮助排序吗。另外,请告诉我哪里出了问题。我是Python新手,所以我自己做这件事。我使用的是C语言或其他语言中常用的方法

base =[5,4,3,2,1]

def splitarray (low, high):
    if  low < high:
        mid = (high+low)/2

        splitarray (low, mid)
        splitarray (mid+1,high)
        merge(low,mid,high)

    else:
        return

def merge(low,mid,high):
    print("merge " +str(low) + " - " +str(mid)+" - "+ str(high))
    result = [0]*len(base)
    k = 0
    i=low
    j=mid+1
    l=0


    while i <= mid and j <= high:
        if (base[i] < base[j]):

            result[k]= base[i]
            k+=1
            i += 1

        if (base[i] > base[j])  :


            result[k]= base[j]

            j += 1
            k += 1





    while i <= mid:
        result[k]= base[i]
        k += 1
        i += 1
    while j <= high:
        result[k]= base[j]
        #count = count + mid - i
        j += 1
        k += 1

    print result

    l = low
    k= 0
    while l <= high:
        base[l] = result[l]
        l += 1


    print base
splitarray(0,len(base)-1)
base=[5,4,3,2,1]
def splitarray(低、高):
如果低<高:
中=(高+低)/2
拆分阵列(低、中)
拆分阵列(中+1,高)
合并(低、中、高)
其他:
返回
def合并(低、中、高):
打印(“合并”+str(低)+“-”+str(中)+“-”+str(高))
结果=[0]*len(基本)
k=0
i=低
j=中间+1
l=0

而i视觉上,算法的操作方式是:

因此,实现合并排序最明显的方法是为每次合并返回一个新列表。也许可以将其优化为您想要做的事情,即在单个顶级
结果上操作。但是如果你这样做,你就不能在每一级合并中仅仅附加到
result
。因为在递归的底层,您将添加四个元素,然后在中间层,您将添加四个元素,然后在顶层,您将添加另外四个元素。太多了。如果这样做,则应该有一个固定的
结果
大小,并在整个执行过程中对其索引进行操作


第二个错误是,您正在为每次合并读取未修改的
base
。每个合并步骤的先决条件是要合并的两个列表已经排序。如果以明显的方式实现该算法,则只需使用来自更深层合并的返回值即可。如果您正在使用顶级
结果以某种优化方式实现算法,那么您应该从
结果
,而不是
基础
,读取当前(更新)代码的问题似乎与最后一个循环有关:

l = low
k= 0
while l <= high:
    base[l] = result[l]
    l += 1

这应该按预期工作。请注意,虽然这将正确地进行排序,但在Python中这并不是一种非常优雅的排序方式。首先,您只能对一个全局变量
base
进行排序,而不能对任何列表进行排序(最好将列表作为参数传递)。但是,由于这看起来像是您主要为学习体验编写的内容,我将把进一步的改进留给您。

请提供有关到底出了什么问题的信息,以及示例输入、预期输出和实际结果。你得到追踪了吗?(如果是,请将其包括在问题中。)排序不正确的结果?(如果是,显示输入和输出。)您不想使用内置的
排序的
?输入是上面给出的数组,即base=[4,3,2,1]输出应该是[1,2,3,4]。谢谢。@MarkDickinson如果你执行这个程序,你会发现错误的。排序输入在代码本身中。@Moses No.我只是在实现merge sortI在这里发现了一种非常类似的方法。[链接]在此代码
中,a
是一个不断变化的结果数组
b
是每次合并期间使用的临时缓冲区,完成后将相关元素写回
a
。你似乎混淆了这些变量的含义。你是对的。修改了密码。现在找不到哪里出了问题。是的。这起作用了。我通过添加K进行测试,但没有添加到增量。我知道这种方法没有利用python的优势。我将按建议进行。谢谢你的帮助。
l = low
k= 0
while l <= high:
    base[l] = result[k]  # read the result from index k, not l
    l += 1
    k += 1  # increment k as well