我用[3,7,5,2,1,4,8]输入得到了以下算法。据说这是快速排序的一部分,它构造了一个分区位置。。输出应该是[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条答案
按热度按时间l2osamch1#
这是快速排序的分区算法。
因为我们使用
while
循环而不是do.. while
(这就是您的算法中提到的内容REPEAT... UNTIL
),我们不需要减量s
和增量d
.bsxbgnwa2#
什么时候
i
及j
如果已定义,则它们等于开始索引减1,结束索引加1。如果使用这些索引,它们将超出范围,因此将出现错误。因此,当代码到达REPEAT ... UNTIL
节,则会立即撤消负1和正1。为了避免此问题,我使用了以下代码:输出:
我相信这个位置可以用来划分列表并对其进行进一步排序,但由于缺乏信息,我不确定如何最好地做到这一点。
多亏了另一个答案,我相信混乱是由
REPEAT ... UNTIL
条件语句。通过我的陈述<=
而不仅仅是<
我已经获得了期望的输出。ne5o7dgx3#