我已经编写了合并排序的代码,但我无法返回排序值如何返回排序列表



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

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)

我无法返回函数的排序值

您正在就地对列表进行排序:排序的结果位于原始列表中。如果要返回包含结果的新列表而不修改原始列表:

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)

您的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

最新更新