- 非遞歸
//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循環來轉換的。