二分查找也叫折半查找,其适用于数据量较大时,但是数据需要先排好顺序。
二分查找的步骤:
(1)先确定数组区间的中间位置mid(mid=(left左区间+right右区间)/2)
(2)将要查找的值key与a[mid]相比较。若相等,查找成功返回mid。若key<a[mid]则值在mid的左边,则将right改成mid-1,若key>a[mid]则值在mid的右边,则将left改成mid+1。
#include<stdio.h>
int BinSearch(int a[ ],int low, int high, int key)
{
if (low<=high)
{
int mid = (low+high)/2;//一分为二
if(key==a[mid])
return mid;//找到key,返回所在位置(递归结束)
else if(key<a[mid]){
high=mid-1;
return BinSearch(a,low,high,key);
}
//递归求解
else if(key>a[mid]){
low=mid+1;
return BinSearch(a,low,high,key);
}
//递归求解
}
else
return -1;//未找到返回-1
}
int main(){
int a[]={12,13,25,54,68,73,88,98};
int result,low=0,high=7,key=88;
result=BinSearch(a,low,high,key);
printf("%d",result);
}