二分查找算法

二分查找详解
本文介绍了一种使用递归实现的二分查找算法,用于在一个有序数组中查找指定值并返回其首次出现的位置。通过示例代码展示了算法的具体实现过程。

面试中被问到二分查找算法,一脸懵逼,没用过啊。回来看看。

题目:一个有序数组,查找值X,返回第一次出现该值的位置

思路:用递归与分治算法实现。(分堆查)

    /**
     *  递归实现 二分查找算法 返回第一次出现该值的位置
     * @param arr 有序数组
     * @param from 起始位置
     * @param to 截止位置
     * @param target 搜索值
     * @return
     */
    public static int bSearch(long[] arr,int from,int to, int target){
        int result = -1;
        //中间值
        int mid = (from+to)>>>1;
        System.out.println(from +"==" +to+"==="+mid);
        //1,如果查不到返回-1
        if(from>to)
            return result;
        //2,如果有值,返回下标     递归方法出口
        if(arr[mid]==target){
            result = mid;
            System.out.print("zhi="+arr[mid]);
        }else if(arr[mid]>target){
            //3,如果中间值大于查询的值,递归调用向前查
            result = bSearch(arr,from,mid-1,target);
        }else{
            //3,如果中间值小于查询的值,递归调用向后查
            result = bSearch(arr,mid+1,to,target);
        }
        return result;
}

        long[] arr = new long[100];
        for(int i=0;i<100;i++){
            arr[i] = Math.round(Math.random()*100);
        }
        Arrays.sort(arr);
        System.out.println("index"+bSearch(arr,0,99,24)+"   ");



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值