递归实现二分法查找

/**
 * 使用递归的方式实现一个二分法查找     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);
		}
    	
    	
		
    }
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值