我的python递归快速排序算法出了什么问题



所以我的算法有两个函数。第一个是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)

第页。S.:我是一个初学者(只有2个月的蟒蛇(,所以请试着简单地解释一下。提前感谢!

您的分区函数存在缺陷。此外,您应该通过传递对列表的引用而不是处理全局变量来提高函数的灵活性/可重用性。以下是我使用霍尔算法和另一种选择枢轴的方法实现的:

def partition(A, lo, hi):
pivot = A[(lo+hi)//2]
i = lo - 1
j = hi + 1
while True:
i += 1
while A[i] < pivot:
i += 1
j -= 1
while A[j] > pivot:
j -= 1
if i >= j:
return j
A[i], A[j] = A[j], A[i]

def quicksort(A, lo, hi):
if lo < hi:
p = partition(A, lo, hi)
quicksort(A, lo, p)
quicksort(A, p + 1, hi)

arr = [81, 4, 73, 1, 98, 69, 300, 14, 7, 420, 190, 8, 9, 1, 2, 3, 9]
quicksort(arr, 0, len(arr)-1)
print(arr)

最新更新