gpt4 book ai didi

python - 实现快速排序并得到一个我不明白的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:37 24 4
gpt4 key购买 nike

我有 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 排在后面。

我正在尝试更改枢轴元素。我想使用数组的最后一个元素而不是第一个元素作为基准(就像上面的实现一样)。为此,我将以下代码行添加到分区之前的快速排序函数中:

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

然后一切都崩溃了。超过最大递归深度。我不明白为什么会这样,这让我发疯。

最佳答案

给定输入[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)

关于python - 实现快速排序并得到一个我不明白的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31420718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com