#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
//递归法
int BinarySearch(int a[],int size,int p){ //输入一个数组,大小为size,查找元素p
if(size == 0) //终止条件,表示没找到
return -1;
int index = size/2;
if(a[index] == p)
return index;
else if(a[index] > p){
index = BinarySearch(a,index,p);
}else{
index += BinarySearch(a+index+1,size-index-1,p) + 1;
}
return index;
}
//迭代法
int BinarySearch02(int a[],int size,int p){
int L = 0;
int R = size-1;
int mid=0;
while(L<=R){ //左右端点夹逼,循环判断
mid = (R+L)/2;
if(a[mid] == p)
return mid;
else if(a[mid] > p){
R = mid-1;
}else{
L = mid+1;
}
}
return -1;
}
int main(){
int test[] = {1,2,3,4,5,6,7,8,9};
cout << BinarySearch(test,9,3) << BinarySearch02(test,9,3) << endl;
return 0;
}
求mid时,最好写成
mid = L+(R-L)/2
,可以放置L+R过大,产生溢出;