首页 > 解决方案 > 我已经编写了合并排序的代码。但是我无法返回排序值如何返回排序列表

问题描述

我为合并排序编写了两个函数:

def mergesort1(c, l, r):
    i, j, k = 0, 0, 0
    while (i < len(l)) & (j < len(r)):
        if l[i] < r[j]:
            c[k] = l[i]
            i += 1
        else:
            c[k] = r[j]
            j += 1
        k += 1
    while i < len(l):
        c[k] = l[i]
        i += 1
        k += 1
    while j < len(r):
        c[k] = r[j]
        j += 1
        k += 1

def mergesort(c):
    if len(c) < 2:
        return c
    l = c[0 : (len(c) // 2)]
    r = c[len(c) // 2 : len(c)]
    mergesort(l)
    mergesort(r)
    mergesort1(c, l, r)

我无法返回函数的排序值

标签: pythonpython-3.xmergesort

解决方案


您正在对列表进行就地排序:排序结果在原始列表中。如果您想在不修改原始列表的情况下返回包含结果的新列表:

def mergesort1(l,r):
    c = [0]*(len(l) + len(r))
    i,j,k=0,0,0
    while (i<len(l))&(j<len(r)):
        if l[i]<r[j]:
            c[k]=l[i]
            i +=1

        else:
            c[k]=r[j]
            j +=1
        k +=1
    while i<len(l):
        c[k]=l[i]
        i+=1
        k+=1
    while j<len(r):
        c[k]=r[j]
        j+=1
        k+=1
    return c

def mergesort(c):
    if len(c)<2:
        return list(c) 
    l = mergesort(c[0:(len(c)//2)])
    r = mergesort(c[len(c)//2:len(c)])
    return mergesort1(l,r)

推荐阅读