二分查找算法

来源:互联网 发布:企业记账软件 编辑:程序博客网 时间:2024/06/07 03:05

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

题目:一个有序数组,查找值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)+"   ");



原创粉丝点击