Quicksort非递归

时间:2014-11-19 18:29:56

标签: python quicksort non-recursive

声明说:

写一个非递归(负)函数,给定一个整数列表(可能是无序的)函数返回带有负数的相同列表到正头和后(不管它们之间的顺序如何)。该算法可以在快速排序中以请求类似策略(虽然稍微简单一些)的形式解决。

我把这段代码:

def negatius(a):

    fin = len(a) - 1
    i = 0
    b = [i]

    for i in range(len(a)):
        if a[i] < 0:
            b[fin] = a[i]
            i += 1

        else:
            b[fin] = a[i]
            fin += 1

    print "La llista és",b[fin]


a=[1,-2,3,-4,-3,5,6]
negatius(a)

并出现错误:本地变量&#39; i&#39;在分配之前引用。我不明白这个

1 个答案:

答案 0 :(得分:1)

您正在从最高索引开始递增fin,并使用它来访问具有此索引的列表中的元素。这是不对的,因为这些指数不存在。

b[fin] = a[i]

b[fin] = a[i]
fin += 1

print "La llista és",b[fin]

同样在if和else中你附加到列表中。那也是最有意义的。你应该追加一次并在其他情况下加前缀

def negatius(a):
    fin = len(a) - 1
    i = 0
    b = [i]
    for i in range(fin):
            if a[i] < 0:
                    b = [a[i]] + b  # prepend a to b
            else:
                    b += [a[i]]     # append a to b

    print "La llista és",b

a=[1,-2,3,-4,-3,5,6]
negatius(a)

打印

La llista és [-3, -4, -2, 0, 1, 3, 5]

请注意您在列表中添加0,我怀疑这没问题。