你代码中间有一部分错了,正确代码如下:
#include
using namespace std;
int main()
{bool flag=0;
int num[10],i,a,beg=0,end=9,mid;
cout<<"从小到大输入10个数:";
for(i=0;i<10;i++)
cin>>num[i];
cout<
for(;beg<=end;)
{
mid=(beg+end)/2;
if(num[mid]>a)
end=mid-1;
else if (num[mid]==a)
{flag=1;break;}
else
beg=mid+1;
}
if(flag)
{
int count=mid+1;
cout<<"在第"<
}
else
cout<<"不在数组中"<
改好了
#include
using namespace std;
int main()
{
bool flag=0;
int num[10],i,a,beg=0,end=9,mid;
cout<<"从小到大输入10个数:";
for(i=0;i<10;i++)
cin>>num[i];
cout<
for(;beg<=end;)
{
mid=(beg+end)/2;
if(num[mid]>a)
end=mid-1;
else if(num[mid]beg=mid+1;
else
{
flag=1;
break;
}
}
if(flag)
cout<<"在第"<
cout<<"不在数组中"<
}
num[mid] > a 说明 a在查找区间 (beg,end) 的左半部分 这时候 beg=mid-1 那么下一次查询的时却是在右半部分查找的。
还有就是 mid 是数组下标(从0)开始,在数组中的位子应该是mid+1(从1开始)。
最终修改如下3处
if(num[mid]>a)
end=mid-1;
else if(num[mid]==a)
{
flag=1;
break;
}
else
beg=mid+1;
}
if(flag)
cout<<"在第"<
cout<<"不在数组中"<
}