递归实现二分法查找

时间:2022-10-27 18:15:34
/**
 * 使用递归的方式实现一个二分法查找     left  right    middle = (left+right)/2
 *    使用二分法查找的前提是  必须是一个有序列的数组
 *    在使用二分法查找的时候,因为每一次用到了在哪个范围内查找,
 *    所以在方法中不仅有带查找的key跟序列,还要有范围的区间
 *    首先需要判断一下,左边的是否比右边小;
 *    求出中间的位置,拿中间的值跟key做比较,如果相等的话,直接返回下标;
 *    不然需要判断一下,key值有可能是在它的左区间还是右区间
 *    如果在左区间就是left,middle-1
 *        右区间就是middle+1,rihgt
 * @author root
 *
 */
public class BinarySercher {
	public static void main(String[] args) {
		int[] arr={1,2,3,4,5,6,7,9,12,14,15,16};
		System.out.println(binary(arr, 4, 0, arr.length-1));
		
	}
    public static int binary(int[] arr,int key,int left,int right){
    	if (left>right){
    		return -1;
    	}
    	int middle = (left+right)/2;
    	if(arr[middle]==key){
    		return middle;
    	}else if(arr[middle]>key){
    		
    		return binary(arr, key, left, middle-1);
    	}else {
    		return binary(arr, key, middle
    				, right);
		}
    	
    	
		
    }
}