折半查找
N个有序整数数列已放在一维数组中,利用二分查找法查找整数m在数组中的位置。若找到,则输出其下标值;反之,则输出“Not be found!”。
由于我们将数存入数组当中,我们可以先设置最大值下标和最小值下标,通过下标表示数值,现将要找的数与最中间的数进行比较,若要找的数大,则在最中间的数和最大值的数之间进行寻找,反之则在最小值的数和最中间的数之间进行寻找,以此一直找下去找到要找的数为止,如果不存在输入的要找的数,则直接输出“Not be found!”。
#include<iostream>
using namespace std;
#define N 7
int main()
{
int x,low=0,high=N-1,mid,y=-1;
int a[N]={6,10,27,35,49,50,80};
cout<<"a数组的数据为:"<<endl;
for(int i=0;i<N;i++)
{
cout<<a[i]<<"\t" ;
}
cout<<endl;
cout<<"要查找的值为:";
cin>> x;
while(low<=high)
{
mid=(low+high)/2;
if(x<a[mid])
{
high=mid-1;
}
else if(x>a[mid])
{
low=mid+1;
}
else
{
y=mid;
break;
}
}
if(y>=0)
{
cout<<"找到了下标值为"<<y<<endl;
}else
{
cout<<"Not be found!"<<endl;
}
return 0;
}
运行结果如下: