【发布时间】:2021-12-31 13:19:20
【问题描述】:
所以我的算法有两个功能。第一个是partition,它将列表的第一个元素作为枢轴,并将所有大于它的元素放在它之后,所有最小的元素放在它之前,我已经对其进行了测试,它工作得很好。第二个函数quicksort 函数,它使用partition 递归地对整个列表进行排序。当我在 pycharm 中运行代码时,它说超出了最大递归深度和一些其他错误。代码如下:
arr = [81, 4, 73, 1, 98, 69, 300, 14, 7, 420, 190, 8, 9]
def partition(low, high):
lo = low
hi = high
pivot = arr[lo]
while lo < hi:
while arr[lo] <= pivot:
lo += 1
while arr[hi] > pivot:
hi -= 1
if hi > lo:
arr[lo], arr[hi] = arr[hi], arr[lo]
arr[0], arr[hi] = arr[hi], arr[0]
return hi
def quicksort(l, h):
if l < h:
j = partition(l, h)
quicksort(l, j)
quicksort(j + 1, h)
quicksort(0, 12)
print(arr)
P.S.:我是一个初学者(只有2个月的python)所以请尽量简单地解释一下。 提前致谢!
【问题讨论】:
-
我刚刚被告知必须使用它也许你可以问问告诉你的人。
-
我非常怀疑您的 partition 功能是否正常工作。
-
删除它并测试你的算法。如果它有目的,比常数 100000 更好的选择是
max(arr)+1,因为它显然意味着比任何数组元素都大。 -
User1984.. 它工作我自己测试了它。这些错误都与recision部分有关
-
我删除了 inf 部分仍然是同样的错误。
标签: python algorithm sorting recursion quicksort