实现快速排序并获取我不明白的错误

时间:2015-07-15 02:53:54

标签: python algorithm search quicksort

我有2个函数,一个分区数组并快速排序的函数:

def partition(a, i, j):
    h = i+1

    for k in range(i+1, j):
        if a[k] < a[i]:
            a[h],a[k] = a[k],a[h]
            h += 1
    a[i],a[h-1] = a[h-1],a[i]

    return h 

# a is an array. After function call a[i..j-1] is sorted in increasing order
def quicksort(a, i, j):
    if j-i <= 1: return

    swap(a, i, j)
    p = partition(a, i, j)

    quicksort(a, i, p)
    quicksort(a, p, j)

这适用于我尝试的所有测试用例,即我调用quicksort(a,0,len(a))并且列表a在之后排序。

我试图改变枢轴元素。我想使用数组的最后一个元素作为数据透视而不是第一个元素(就像上面的实现一样)。为此,我将以下代码行添加到分区之前的quicksort函数中:

a[i],a[j-1] = a[j-1],a[i]

一切都破了。超出最大递归深度。我不明白它为什么会发生,这让我发疯。

1 个答案:

答案 0 :(得分:2)

给定输入[1,2,3],它将落入具有一致p的无限循环;使用p / p-1切换p+1

def quicksort(a, i, j):
    if j <= i: return

    swap(a, i, j)
    p = partition(a, i, j)

    quicksort(a, i, p-1)
    quicksort(a, p+1, j)