我已经尝试调试我的代码几个小时了,但并没有取得进展。我喜欢有人能帮助我,我才开始学习算法
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函数的开头使用了基本情况
答案 0 :(得分:3)
您的quicksort
和quick_sort
例程将要排序的子数组中第一项和最后一项的索引用作参数。对子数组进行分区后,对两部分进行排序。但是,您在调用quick_sort(arr, start, pindex)
的第一部分中包含了分区的枢轴元素。您应该将枢轴元素删除,所以请使用quick_sort(arr, start, pindex-1)
。
尝试一下。您没有评论,因此很难调试您的程序。您的示例输入也太大,难以调试。尝试一个空数组,然后是一个包含一个元素的数组,然后是一些包含两个元素的数组,依此类推,以捕获错误。
有了这一更改,您的程序即可通过我所有的测试。