我已经为合并编写了一个代码排序。但是无法返回排序的值如何返回排序的lis

2024-09-24 00:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

我无法返回函数的排序值


Tags: 函数lenreturnif排序defelsewhile
2条回答

您的mergesort函数对列表进行适当排序。可以添加return语句以方便方法链接,但函数将始终返回其原始参数:

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:
        l = c[0 : (len(c) // 2)]
        r = c[len(c) // 2 : len(c)]
        mergesort(l)
        mergesort(r)
        mergesort1(c, l, r)
    return c

您正在对列表进行排序:排序的结果在原始列表中。如果要返回一个新列表,其中包含结果,而不修改原始列表:

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)

相关问题 更多 >