带有Python的Quicksort算法引发RecursionError

时间:2018-08-04 09:32:23

标签: python recursion quicksort

我已经尝试调试我的代码几个小时了,但并没有取得进展。我喜欢有人能帮助我,我才开始学习算法

def quicksort(arr):
    start = 0
    end = len(arr) - 1
    quick_sort(arr, start, end)


def quick_sort(arr, start, end):
    if start < end:
        pindex = partition(arr, start, end)
        quick_sort(arr, start, pindex)
        quick_sort(arr, pindex+1, end)


def partition(arr, start, end):
    pivot = arr[end]
    i = start
    for j in range(start, end):
        if arr[j]<= pivot:
            arr[i], arr[j] = arr[j], arr[i]
            i += 1
    arr[i], arr[end] = pivot, arr[i]
    return i;

当我用quicksort([6,4,5,4,2,43,1,4,532,515,243,3,34,5,12,24,234,45,6,457,5])运行它时

我知道

  

RecursionError:在比较中超过了最大递归深度

我很确定我在quick_sort函数的开头使用了基本情况

1 个答案:

答案 0 :(得分:3)

您的quicksortquick_sort例程将要排序的子数组中第一项和最后一项的索引用作参数。对子数组进行分区后,对两部分进行排序。但是,您在调用quick_sort(arr, start, pindex)的第一部分中包含了分区的枢轴元素。您应该将枢轴元素删除,所以请使用quick_sort(arr, start, pindex-1)

尝试一下。您没有评论,因此很难调试您的程序。您的示例输入也太大,难以调试。尝试一个空数组,然后是一个包含一个元素的数组,然后是一些包含两个元素的数组,依此类推,以捕获错误。

有了这一更改,您的程序即可通过我所有的测试。