求问大神一道C++的题:编写函数,用折半查找法在长度为n的整型数组a中查找某个数据b。

我写了一个程序,我觉得自己写的没错,为啥没得出结果呢?#include<iostream.h>intless(int,int);intgreater(int,int);v... 我写了一个程序,我觉得自己写的没错,为啥没得出结果呢?
#include<iostream.h>
int less(int,int);
int greater(int,int);
void main(){
int n;
int a[]={3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
int min=0,max=14;
cout<<"请输入你要查找的数:";
cin>>n;
for(int mid=(min+max)/2;n!=a[mid];){
if(n>a[mid])
min=greater(min,mid);
else
max=less(max,mid);
}
cout<<"您要查找的数的所在位置为:"<<mid<<endl;
}
int greater(int min,int mid){
min=mid+1;
return min;
}
int less(int max,int mid){
max=mid-1;
return max;
}
展开
 我来答
东风冷雪
2016-11-18 · TA获得超过3945个赞
知道大有可为答主
回答量:3910
采纳率:76%
帮助的人:986万
展开全部

这样

#include<iostream.h>
int less(int,int);
int greater(int,int);
void main()
{
int n;
int tag=0;
int a[]={3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
int min=0,max=14;
cout<<"请输入你要查找的数:";
cin>>n;
for(int mid=(min+max)/2;n!=a[mid];mid=(min+max)/2)
{
if(n>a[mid])

min=greater(min,mid);
else
max=less(max,mid);
 if(min>max)
 {
 tag=1;
    break;
 }
}
     if(tag==0)
cout<<"您要查找的数的所在位置为:"<<mid<<endl;
  if(tag==1)
cout<<"您要查找的数不存在 ";
}

int greater(int min,int mid)
{
min=mid+1;
return min;
}
int less(int max,int mid)
{
max=mid-1;
return max;
}
追问
谢谢哥们!但是我想问下,是什么原因导致我上面出不了结果呢?程序没错,但是输入数据后光标一直在闪。还有,你这个是什么编译器呀?
追答
你 for(int mid=(min+max)/2;n!=a[mid];)

(min+max)/2;语句只会执行一次。
而且判断语句,会出现死循环。

vs
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式