我是python的新手。我正在尝试编写mergesort的python代码,我无法找到错误。
import math
t = int(input())
def merge(lf,rf):
p=0
q= 0
b=[]
for i in range(len(rf)+len(lf)):
if (p>=len(lf)):
b.append(rf[q:])
break
elif (q>=len(rf)):
b.append(lf[p:])
break
elif (lf[p]>=rf[q]):
b.append(rf[q])
q=q+1
else:
b.append(lf[p])
p=p+1
return b
def sort(a):
if (len(a)>1):
mid = int(len(a)/2)
lf=a[:mid]
rf=a[mid:]
lf=sort(lf)
rf=sort(rf)
a=merge(lf,rf)
print (a)
return a
for i in range(t):
n = int(input())
a = [0]*n
for j in range(n):
a[j]=int(input())
sort(a)
print(a)
答案 0 :(得分:2)
这一行
b.append(rf[q:])
将列表rf[q:]
附加到b
作为单个项目。但这并不是你真正想要的,因为b
最终会包含数字的子列表以及它应该包含的数字。因此,您需要将rf[q:]
的内容添加到b
,然后您可以使用
b.extend(rf[q:])
类似的评论适用于
b.append(lf[p:])
出现错误消息是因为您的代码尝试将lf
和rf
列表中的数字与您意外添加的子列表进行比较。
另外,正如莱昂在评论中提到的那样,你需要做
a = sort(a)
在您脚本的倒数第二行,因为您的sort
函数无法修改您传递的a
。
答案 1 :(得分:1)
当您执行b.append(rf[q:])
或b.append(lf[p:])
时,您将列表作为元素添加到列表b
中,看起来它应该是一个列表整数。