Python中的QuickSort。阵列故障增加

时间:2017-09-12 11:42:44

标签: python increment quicksort

我正在尝试在python中实现quicksort。问题是如何在数组a中递增/递减i / j的值。我知道我应该写i=i+1并且在python中没有像i++这样的东西,但是我不明白我应该以哪种方式做到这一点。 我是新手,这是我的代码。

def quicksort(a,lo,hi):
    if(hi<=lo):
        return
    i = lo - 1
    j = hi
    v = a[hi]

    while True:
        while(a[++i] < v):
            pass

        while(v < a[--j]):
            if(j==lo):
                break
        if(i>=j):
            break
        t = a[i]
        a[i] = a[j]
        a[j] = t

    t = a[i]
    a[i] = a[hi]
    a[hi] = t
    quicksort(a, lo, i - 1)
    quicksort(a, i + 1, hi)

2 个答案:

答案 0 :(得分:0)

在python中,你不能分配和获取值,这是一个故意的限制,以避免拼写错误的问题,找到正确的序列点......

你别无选择,无法模仿&#34; C端口代码:

    while(a[++i] < v):
        pass

    while(v < a[--j]):
        if(j==lo):
            break

(请注意,两个构造都会生成无限循环,因为:

++i == i

--j == j

(应用一元加上任意次数或一元减去偶数次给出相同的数字,请参阅Why Don't Two Plus Operators Throw an Error (e.g., 1 + + 2)

所以改为:

    i += 1
    while(a[i] < v):
        i += 1

    j -= 1
    while(v < a[j]):
        if(j==lo):
            break
        j -= 1

答案 1 :(得分:0)

以下构造在Python中的工作方式与在C ++中的工作方式不同:

while(a[++i] < v):

以及这一个:

while(v < a[--j]):

您更改代码的方式如下:

def quicksort(a,lo,hi):
    if(hi<=lo):
        return
    i = lo - 1
    j = hi
    v = a[hi]

    while True:
        i += 1
        while(a[i] < v):
            i += 1
            pass

        j -= 1
        while(v < a[j]):
            j -= 1
            if(j==lo):
                break
        if(i>=j):
            break
        t = a[i]
        a[i] = a[j]
        a[j] = t

    t = a[i]
    a[i] = a[hi]
    a[hi] = t
    quicksort(a, lo, i - 1)
    quicksort(a, i + 1, hi)