我想知道是否有人可以帮助我修复错误,我的快速排序代码有: 它不会编译并以红色突出显示代码的最后一行。 我无法弄清楚出了什么问题。 sort已被定义为一个函数,为什么它被突出显示为红色?
def sort(*myarray):
less = []
equal = []
greater = []
if len(myarray) > 1:
pivot = myarray[0]
for x in myarray:
if x < pivot:
less.append(x)
if x == pivot:
equal.append(x)
if x > pivot:
greater.append(x)
return sort(less)+sort(equal)+sort(greater)
else:
return myarray
print sort([12,4,5,6,7,3,1,15])
答案 0 :(得分:4)
您将函数定义为采用可变数量的参数(*myarray
位),然后将myarray
内部用作单个参数(要排序的列表),当它是列出包含要排序的列表。
您可能应该从函数参数中删除*
。 This questions非常彻底地解释它。
你可以保留*
,但是你必须使用元组解压缩来获得相同的结果。
修改强>
虽然上述情况属实,但这可能不是您遇到的问题。
IDLE会在ast行上给你无效的语法错误,因为在交互模式下 - 行以>>>
开头,它一次只接受一个语句。在您的情况下,该语句是sort()
定义。
尝试在函数定义后输入2次,这会让你回到repl,在那里你可以引入另一个语句(print sort([12,4,5,6,7,3,1,15])
)
答案 1 :(得分:2)
有一些问题让我很好奇你是如何测试的:
myarray
中def sort(*myarray):
前方远离星号/星号。否则它实际上返回一个包含原始数组的单元素元组。答案 2 :(得分:0)
假设你有两个或多个元素在某个点上等于一个数据点,你得到一个无限循环,因为你会得到:equal = [x,x]
(至少两个元素),然后调用sort([x,x])
,反过来将x
作为支点,并创建equal = [x,x]
,并导致sort([x,x])
,....
这个问题的简单解决方案:sort(equal)
的输出应该是什么?如何对相同元素列表进行排序?
编辑:嗯,您的评论显示您正在寻找其他问题,但我会将其留在此处,因为它解释了您对代码的不同问题,应该解决。< / p>
答案 3 :(得分:0)
如果它是快速排序的功能,你真的可以在其中使用函数排序吗?
不会有这样的工作吗?
def qsort(list):
pivind=0
left, right, pivot= [], [], []
for x in list:
if list[pivind]==x: pivot.append(x)
elif list[pivind]>x: left.append(x)
else: right.append(x)
if len(left)>1: left=qsort(left)
if len(right)>1: right=qsort(right)
return (left + pivot + right)