折半查找
查找的数据必须是顺序排列的
查找的条件:low<high
key的一次查找过程:
mid=(high+low)/2;
1.key>a[mid],没有找到,low=mid+1,结束本次查找
2.key<a[mid],没有找到,high=mid-1,结束本次查找
3.key==a[mid],找到,输出mid,全部查找结束
代码如下:
#include <iostream>
using namespace std;
int main()
{
const int N=10;
int r[N];
int i,low,high,find=0,key,mid;
cout<<"请按从大到小的顺序输入N个整数:";
for(i=0;i<10;i++)
cin>>r[i];
cout<<"请输入要查找的整数:";
cin>>key;
low=0;high=N-1;
while(low<=high){//在low<=high的查找条件下一直循环折半
mid=(low+high)/2;
if(key==r[mid]){
find=1;break;
}
else if(key<r[mid]){
high=mid-1;
}
else if(key>r[mid]){
low=mid+1;
}
}
if(find==1) cout<<"所找数据在数组第"<<mid+1<<"位\n";
else cout<<"所找数据不在数组中\n";
return 0;
}