我遇到问题,我无法达到此网站的行(14,15,16,17)用于选择算法的目的。
有此问题的网站位于here。
编辑:另外,为部分“分区编写这些行是否正确并使用数据透视表重现? (“m”是我的支点,“i”是此算法的输入)
arrOne<--{a of arr : a<m}
arrTwo<--{a of arr : a>m}
if (i < m ) then
return Select(arrOne,i)
else if (i > m) then
return Select(arrTwo,i-m)
else
return m
答案 0 :(得分:4)
这是它选择要递归的分区的地方。
为了便于说明,我们假设您正在寻找具有100个元素的数组的中值。第一次分区时,您会获得60和40个项目的分区。由于您正在寻找50 th 项,您知道必须位于左侧分区(有60个项目)。
然后你对它进行分区,然后分别得到25个和35个项目的左右分区。这次我们可以看到50 th 项必须在正确的分区中,所以我们递归到那个。
我们继续这个,直到我们到达一个只包含一个项目的分区 - 我们正在寻找的那个。