【发布时间】:2023-03-15 14:21:01
【问题描述】:
我得到了以下带有 [3, 7, 5 ,2, 1, 4, 8] 输入的算法。据说它是 QuickSort 的一部分,它构造了一个分区位置。输出应该是 [3, 1, 2, 5, 7, 4, 8]
我使用了以下python代码:
def partition(x, s, d):
v = x[s]
i = s-1
j = d+1
while i < j:
while True:
i = i+1
if x[i] >=v:
break
while True:
j = j-1
if x[j] <=v:
break
if (i<j):
x[i], x[j] = x[j], x[i]
print (x)
return j
x = [3, 7, 5, 2, 1, 4, 8]
partition(x, 1, 6)
我无法得到 [3, 1, 2, 5, 7, 4, 8] 据称这是正确的结果。 请帮忙,我尝试了 s 和 d 的不同值,这很可能代表左右。
【问题讨论】:
-
你得到了什么?
-
[3, 4, 5, 2, 1, 7, 8]
-
我同意刚刚删除的评论,这里的第二个参数应该为零,否则你不对第一个数字进行排序..
-
我删除了我的评论,因为如果第二个参数是第 6 行的 0,
UNTIL x[i] >= v的索引超出范围错误。 @Surt -
@LaytonGB 我也是这么认为的,但是算法实际上在检查索引之前会递增。
标签: python algorithm quicksort data-partitioning