首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QuickSort代码(Python)

QuickSort代码(Python)
EN

Stack Overflow用户
提问于 2015-02-10 22:07:59
回答 1查看 374关注 0票数 2

这是我在StackExchange上的第一篇文章,我试图找出简单的QuickSort程序的代码有什么问题。我很确定一些整数只需要用+-1或什么来调整,所以我想保留这个格式。

守则如下:

代码语言:javascript
复制
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)

另外,我注意到,如果我将'j in range(p,r)‘更改为'j in range(p,r)',那么代码就会无限地运行,但是看起来不应该。有什么想法?

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

代码语言:javascript
复制
 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]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-11 02:13:40

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

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

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

代码语言:javascript
复制
def partition(Array,lower,upper):
    ...
    for j in range(lower,upper):
    ...
    return (Array,i)

结果:

代码语言:javascript
复制
>>> print QuickSort([8, 18, 6, 19])
[6, 8, 18, 19]    

代码语言:javascript
复制
>>> print QuickSort([16, 0, 20, 10, 5, 2])
[0, 2, 5, 10, 16, 20]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28442837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档