快速排序代码(Python)

快速排序代码(Python),python,quicksort,Python,Quicksort,这是我在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

这是我在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)

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

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

2) 最后应该返回
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]    


使用有意义的变量名。。。单字母变量名意味着必须有人为您查找算法。。。我们中的大多数人已经有一段时间没有上过算法课了,所以快速排序的实现并不是我们脑子里想的那么简单(特别是因为它除了一个学习练习之外没有任何价值)。谢谢,我把它们改了。这样更好(我知道这对你来说可能很明显,因为你正在学习这门课,或者刚刚在某个地方介绍了算法)…现在给你的快速排序添加一个示例调用,以及你得到的输出(如果不是很明显的话,可能是你所期望的),你能给我们一些示例输入、代码输出和预期输出吗?就像
[4,5,3,1,2]
或etcCode注释、docstrings,也有助于确定您打算做的事情是否就是您正在做的事情。
>>> print QuickSort([8, 18, 6, 19])
[6, 8, 18, 19]    
>>> print QuickSort([16, 0, 20, 10, 5, 2])
[0, 2, 5, 10, 16, 20]