0

我想知道是否有人可以帮助我修复我的快速排序代码的错误:它无法编译并以红色突出显示代码的最后一行。我不知道出了什么问题。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])
4

4 回答 4

4

您将函数定义为采用可变数量的参数(*myarray位),然后使用myarrayinside 作为单个参数(要排序的列表),当它是一个包含要排序的列表的列表时。

您可能应该*从函数参数中删除 。这个问题解释得很透彻。

您可以保留*,但随后您将不得不使用元组解包来获得相同的结果。

编辑

尽管上述情况属实,但这可能不是您遇到的问题。

IDLE 将在 ast 行上给出无效的语法错误,因为在交互模式下 - 以 开头的行>>>,它一次只接受一个语句。在您的情况下,该声明就是sort()定义。

尝试在函数定义后按 Enter 2 次,这应该会让您回到 repl,您可以在其中引入另一条语句 ( print sort([12,4,5,6,7,3,1,15]))

于 2013-08-15T22:50:45.603 回答
2

有几件事是错误的,这让我很好奇你是如何测试这个的:

  1. Python 代码不是“编译”的,而是被解释的。(好吧,不完全正确;它被解析为一种字节码;但是,它的编译方式与诸如 C 之类的语言不同,在 C 语言中,必须将整个程序转换为机器指令,然后才能将其转换为机器指令。运行。)您还提到最后一行代码以红色突出显示 - 是什么?
  2. 此代码实际上有效,但前提是您将 in 前面的星号/星号远程myarray遥控def sort(*myarray):。否则它实际上返回一个包含原始数组的单元素元组。
于 2013-08-15T22:51:45.870 回答
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)
于 2014-07-06T01:22:17.403 回答
0

假设你有两个或多个元素在某个点等于一个枢轴,你会得到一个无限循环,因为你会得到:(equal = [x,x]至少两个元素),然后调用sort([x,x]),它又将x作为一个枢轴,然后创建equal = [x,x],和原因sort([x,x]),....

这个问题的简单解决方案: 的输出应该是什么sort(equal)?你如何对相同元素的列表进行排序?

编辑:嗯,你的评论表明你正在寻找一个不同的问题,但我会把它留在这里,因为它解释了你在代码中遇到的另一个问题,应该得到解决。

于 2013-08-15T22:48:01.997 回答