首页 新闻 赞助 找找看

线性时间选择问题

0
悬赏园豆:5 [已关闭问题] 关闭于 2012-12-24 20:24

select函数如下:for循环中,为什么是i<(r-p-4)/5,而不是i<(r-p)/5  ????

求教各位一下。

int select(int p,int r,int k)   //寻找中位数

       {

              if(r-p<5){

                     bubble(p,r);

                     return a[p+k-1];

              }

              for(int i=0;i<(r-p-4)/5;i++)

              {

                     int s=p+5*i,t=s+4;

                     bubble(s,t);

                     int temp=a[p+i];

                     a[p+i]=a[s+2];

                     a[s+2]=temp;

              }

              int x=select(p,p+(r-p-4)/5,(r-p+6)/10);

              i=partition(p,r,x);

              int j=i-p+1;

              if(k<=j)

                     return select(p,i,k);

              else

                     return select(i+1,r,k-j);

       }

 

c++ c
mca的主页 mca | 初学一级 | 园豆:172
提问于:2012-11-08 23:07
< >
分享
所有回答(1)
0

减去4是为了防止重复操作吧……

ms_water | 园豆:510 (小虾三级) | 2012-11-09 10:02

能说得详细点吗?为什么有重复操作?

支持(0) 反对(0) mca | 园豆:172 (初学一级) | 2012-11-09 21:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册