在有序表中进行折半查找
#include <stdio.h>
#include <xmath.h>
#include <algorithm>
int BinSearch(int a[], int low, int high, int k);
using namespace std;
int main(){
int n=10,i;
int k=7;
int a[]={1,2,3,4,5,6,7,8,9,10};
i=BinSearch(a,0,n-1,k);
if(i>=0)
printf("a[%d]=%d",i,k);
else
printf("查无此人");
}
int BinSearch(int a[], int low, int high, int k) {
int mid;
if(low<=high){ //当前区间存在元素
mid=(low+high)/2; //求当前区间的中间位置
if(a[mid]==k)
return mid;
if(a[mid]>k)
return BinSearch(a,low,mid-1,k); //当a[mid]>k时在a[low...mid-1]中递归查找
else
return BinSearch(a,mid+1,high,k); //当a[mid]<k时在a[mid+1...high]中递归查找
}
return 0;
}