- 非递归
//a[]是数组,n是数组长度,key是查找的关键字
int BinSearch(int a[],int n,int key) {
int l=0,r=n-1;
int mid;
while(l<=r){
mid=(1+r)/2;
if(a[mid]==key) return mid;
else if(a[mid]<key) l=mid+1;
else r=mid-1;
}
return -1;
}
- 递归
//函数头和非递归的不一样,是为了递归的时候传参
int mid;
int BinSearchRec(int a[],int key,int l,int r){
//递归出口1
if (l>r) return -1;
//递归出口2
mid=(l+r)/2;
if (a[mid]==key) return mid;
//递归体
if (a[mid]<key) BinSearchRec(a[],key,mid+1,r);
else BinSearchRec(a[],key,l,mid-1);
}
非递归和递归是可以通过while循环来转换的。