本文分别使用循环的方法和递归的方法实现了有序数组中的二分查找。
package recursion;
public class RecursionTest3 {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,8,9,11,52};
System.out.println(binarySearchfor(array,11));
System.out.println(binarySearchrecursion(array,11,0,array.length-1));
}
//循环实现二分查找
public static int binarySearchfor(int[] array, int value){
int l = 0; //下指针
int h = array.length -1; //上指针
int mid; //中间的指针
while(l<=h){//当下指针小于等于上指针的时候
mid = (l+h)/2;//mid是整数,所以除以二得到的一定是整数
if(array[mid] == value){
//找到了
return mid;
}else {
if(value > array[mid]){
l = mid;//value大于mid处元素,下指针上移
}else {
h = mid;//value小于mid处元素,上指针下移
}
}
}
return -1; //表示数组中不存在我们要找的值
}
//递归实现二分查找
public static int binarySearchrecursion(int[] array, int value,int l ,int h){
//数组,下指针,上指针
int mid = (l+h)/2;
// 边界条件:1.找到了值,2.数组找完了还没找到
if(value == array[mid]) {
//找到了值
return mid;
}else if(l>h){
//查找结束仍然没找到
return -1;
}else {
if(value>array[mid]){
return binarySearchrecursion(array,value,mid+1,h);//在return中调用函数,可以返回调用函数返回的结果
}else if(value<array[mid]){
return binarySearchrecursion(array,value,l,mid-1);
}else {
return -1; //遇到意外情况,maybe
}
}
}
}