二分查找前提条件是存在一组数据已经排序好的, 目标值每次都只需要跟临界点那个值进行对比。
当大于这个临界值则,取[临界值+1]~[右下标]的临界值,再跟目标值对比反复直至找到;当小于这个临界值则,取[左下标]~[临界值-1]的临界值,再跟目标值对比反复直至找到。
代码简单的二分查找(注意退出的条件左下标大于右下标或者找到目标值):
private static int test(int a[],int n) {
int left = 0;
int right = a.length - 1;
while(left <= right){
int temp = (right + left )/2;
if(a[temp] > n){
right = temp - 1;
}else if(a[temp] < n){
left = temp + 1;
}else if(a[temp] == n){
return temp;
}
}
return -1;
}
代码通过递归二分查找(注意递归最重要的事退出递归的条件):
private static int test2(int a[],int n,int left,int right) {
if(left > right || n > a[a.length - 1] || n < a[0]){
return -1;
}
int temp = (left + right)/2;
if(a[temp] > n){
return test2(a , n , left , temp-1);
}else if(a[temp] < n){
return test2(a , n , temp + 1 , right);
}else{
return temp;
}
}