合并排序递归错误

Mergesort recursion error

我在 python.The 函数合并中编写了这个合并排序代码,当我单独调用它时它运行良好,它对两个不同的排序 lists.But 当我在真正的合并排序递归问题中使用它时,它没有按预期进行 work.I 正在上传我的代码 请帮助我解决这个问题

def merge(list,p,q,r):

    list1=[]
    list2=[]
    list3=[]
    i=0
    j=0
    for a in list[:q+1]:
        list1.append(a)
    list1.append(99999999999)

    for b in list[q+1:]:
        list2.append(b)
    list2.append(9999999999999999999999999)
    for k in range(len(list)):
        if list1[i]<list2[j]:
            list3.insert(k,list1[i])
            i=i+1
        else:
            list3.insert(k,list2[j])
            j=j+1
        return list3




def mergesort(list,p,r):

    if p<r:

      q=(p+r)/2
      mergesort(list,p,q)
      mergesort(list,q+1,r)
      merge(list,p,q,r)


list=[1,5,7,8,2,4,6,9]

mergesort(list,0,7)

print list

没有意向性错误

输出是:

[1, 5, 7, 8, 2, 4, 6, 9]

它的打印与列表相同 不排序

您没有在函数“merge

中修改列表

您要么需要修改 list 要么 return 新的 list ,您两者都不做

您可以 return list3 从合并功能 并将合并排序修改为:

def mergesort(list,p,r):
    if p<r:
      q=(p+r)/2
      mergesort(list,p,q)
      mergesort(list,q+1,r)
      list =merge(list,p,q,r)

您好,成功了: 使用

 def merge(list,p,q,r):

    list1=[]
    list2=[]
    list3=[]
    i=0
    j=0
    for a in list[:q+1]:
        list1.append(a)
    list1.append(99999999999)

    for b in list[q+1:]:
        list2.append(b)
    list2.append(9999999999999999999999999)
    for k in range(len(list)):
        if list1[i]<list2[j]:
            list3.insert(k,list1[i])
            i=i+1
        else:
            list3.insert(k,list2[j])
            j=j+1
    return list3




def mergesort(list,p,r):

    if p<r:

      q=(p+r)/2
      mergesort(list,p,q)
      mergesort(list,q+1,r)
      list = merge(list,p,q,r)
      return list

list=[1,5,7,8,2,4,6,9]

list = mergesort(list,0,7)

print list