二分查找

二分查找的思路就是:首先传入的数组要有序,然后每次都与中间的数据做比较,再判断是找到了要找的数据,还是找得大了还是找得小了,然后再决定接下去比较的范围

/**
     * 
     * @param arr从小到大的有序的数组
     * @param target目标数字
     * @return目标数字所在的下标
     */
    public static int BinarySearch(int[] arr,int target){

        int left = 0;
        int right = arr.length - 1;
        while(left <= right){                   //循环退出的条件
            int temp = left + (right - left)/2; //可以防止数据越界
            if(target == arr[temp]){            //每次都与中间的数值做比较
                return temp+1;
            }else if(target > arr[temp]){
                left = temp + 1;
            }else{
                right = temp - 1;
            }
        }
        return -1;
    }

也可以采用递归的方式来查询

    private static int i = -1;

    /**
     * 
     * @param arr从小到大的有序数组
     * @param left起始位置
     * @param right终止位置
     * @param target目标数字
     * @return返回目标数字的下标
     */
    public static int BinarySearch_2(int[] arr,int left,int right,int target){

        if(left<=right){
            int temp = left + (right - left)/2;
            if(target == arr[temp]){
                i = temp;
            }else{
                if(target > arr[temp]){
                    left = temp + 1;
                }else{
                    right = temp - 1;
                }
                BinarySearch_2(arr,left,right,target);
            }
        }
        return i;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值