所谓的二分查找,在一组遵循一定规律的数中查找自己想要的数,这里以一组从小到大排好的数组为例进行二分查找,二分思想如下:
假设你要找 n ,那么先让 n 与数组中间的数比较,缩小一半区间,如果 n 比中间的数大,那么以后半部分作为新的查找区间,让 n 与新区间的中间数比较,再根据大小重新缩小一半的区间,直到区间只剩一个数,结果找到或者没找到,也可能在执行过程中就找到了 n ,找到 n 了就输出它的位置,代码如下:
//默认 a[] 元素已经从小到大排好
#include<iostream>
#include<cstdio>
using namespace std;
//定义二分查找函数
int erfen(int a[],int size,int n){
int m,s=0,e=size-1;//初始化首尾位置
while(s<=e){
m=(s+e)/2;//中间位置
if(a[m]==n)
return m;//找到了就直接输出,跳出函数体
else if(a[m]<n)
s=m+1;//缩小区间
else
e=m-1;//缩小区间
}
return -1;
}
//合理性检验(以 9 个元素的数组为例)
int main(){
int a[10],n,size=9;
cin>>n;
for(int i=0;i<size;i++)
cin>>a[i];
int ans=erfen(a,size,n);
if(ans==-1)
cout<<"not found"<<endl;
else
cout<<"location:"<<ans<<endl;
return 0;
}