求问大神一道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;
} 展开
#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;
} 展开
展开全部
这样
#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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询