QuickSort代码(Python)

时间:2015-02-10 22:07:59

标签: python quicksort

这是我在StackExchange上的第一篇文章,我试图弄清楚我的代码对于一个简单的QuickSort程序有什么问题。我很确定某些整数只需要调整+ -1或者其他东西,所以我想保留格式。

代码如下:

def QuickSort(Array_1,lower=0,upper=-1):
    print(Array_1)
    if upper==-1:
        upper=len(Array_1)-1
    if lower<upper:
        Array_2,pivot=partition(Array_1,lower,upper)
        Array_3=QuickSort(Array_2,lower,pivot-1)
        Array_4=QuickSort(Array_3,pivot+1,upper)
        return Array_4
    else:
        return Array_1

def partition(Array,lower,upper):
    key=Array[upper]
    print(Array)
    i=lower
    j=lower-1
    z=0
    for j in range(lower,upper-1):
        print(i)
        print(j)
        if Array[j]<key:
            Array[i],Array[j]=Array[j],Array[i]
            i+=1
    Array[upper],Array[i]=Array[i],Array[upper]
    print(Array)
return (Array,i+1)

此外,我注意到的一件事是,如果我更改范围(p,r-1)&#39;中的&#39; j,代码将无限运行。到范围(p,r)&#39; j,但它看起来不应该。想法?

变量已编辑为有意义的变量。我认为他们都被正确改变了。

 input: [8, 18, 6, 19]
 desired output: [6,8,18,19]
 output: [19, 8, 18, 6]

 input: [16, 0, 20, 10, 5, 2]
 desired output: [0,2,5,10,16,20]
 output: [2, 0, 20, 16, 10, 5]

1 个答案:

答案 0 :(得分:4)

您已经猜到的partition函数中只有很小的错误:

1)由于您使用了for代替range(lower, upper-1)

2)您应该最终返回range(lower, upper)而不是i

i+1

结果:

def partition(Array,lower,upper):
    ...
    for j in range(lower,upper):
    ...
    return (Array,i)

>>> print QuickSort([8, 18, 6, 19])
[6, 8, 18, 19]