C语言:怎样用二分法找出最接近又不大于的一个数
intbinarysearch1(RNoder[],intn,intk)/*二分法查找*/{inti,j,m;i=0;j=n-1;while(i<=j){m=(i+j)/...
int binarysearch1(RNode r[],int n,int k)/*二分法查找*/
{
int i,j,m;
i=0;j=n-1;
while(i<=j)
{m=(i+j)/2;
if(k==r[m].key]) return(m);
else if(k<r[m].key) j=m-1;
else i=m+1;
}
return(-1);
}
该怎样修改,使它返回一个最接近又不大于所查找的数的位置值(数组中可能没有要查找的数) 展开
{
int i,j,m;
i=0;j=n-1;
while(i<=j)
{m=(i+j)/2;
if(k==r[m].key]) return(m);
else if(k<r[m].key) j=m-1;
else i=m+1;
}
return(-1);
}
该怎样修改,使它返回一个最接近又不大于所查找的数的位置值(数组中可能没有要查找的数) 展开
1个回答
展开全部
为了方便调试,我把数据类型改了,你自己改回来吧,还有我没加超出边界的判断
#include <stdio.h>
int r[10]={2,4,6,8,10,12,14,16,18,21};
int binarysearch1(int n,int k)
{
int i,j,m;
i=0;j=n-1;
while(i<j)
{m=(i+j)/2+1;
if(k==r[m])return(m);
else if(k<r[m]) j=m-1;
else i=m;
}
return(i);
}
int main()
{
int i;
for(i=3;i<=21;i++)printf("%d\t",binarysearch1(10,i));
return(0);
}
#include <stdio.h>
int r[10]={2,4,6,8,10,12,14,16,18,21};
int binarysearch1(int n,int k)
{
int i,j,m;
i=0;j=n-1;
while(i<j)
{m=(i+j)/2+1;
if(k==r[m])return(m);
else if(k<r[m]) j=m-1;
else i=m;
}
return(i);
}
int main()
{
int i;
for(i=3;i<=21;i++)printf("%d\t",binarysearch1(10,i));
return(0);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询