快速排序代码(Python)

2024-10-01 22:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在StackExchange上的第一篇文章,我试图找出一个简单的快速排序程序的代码有什么问题。我很确定某个整数只需要调整+-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)

另外,我注意到的一点是,如果我将'jinrange(p,r-1)'改为'jinrange(p,r-1)',代码会无限地运行,但看起来不是应该的。思想?在

变量已被编辑为有意义的变量。我想他们都改对了。在

^{pr2}$

Tags: key代码returnifdef文章arrayupper
1条回答
网友
1楼 · 发布于 2024-10-01 22:30:17

正如您已经猜到的,partition函数中只有一些小错误:

1)您的for循环没有处理最后一个元素,因为您使用了range(lower, upper-1)而不是{}

2)最后应该返回i,而不是i+1

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

结果:

^{pr2}$

以及

>>> print QuickSort([16, 0, 20, 10, 5, 2])
[0, 2, 5, 10, 16, 20]

相关问题 更多 >

    热门问题