在Select算法中使用pivot重复

时间:2010-06-19 04:40:43

标签: algorithm analysis

我遇到问题,我无法达到此网站的行(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

1 个答案:

答案 0 :(得分:4)

这是它选择要递归的分区的地方。

为了便于说明,我们假设您正在寻找具有100个元素的数组的中值。第一次分区时,您会获得60和40个项目的分区。由于您正在寻找50 th 项,您知道必须位于左侧分区(有60个项目)。

然后你对它进行分区,然后分别得到25个和35个项目的左右分区。这次我们可以看到50 th 项必须在正确的分区中,所以我们递归到那个。

我们继续这个,直到我们到达一个只包含一个项目的分区 - 我们正在寻找的那个。