二分查找之Java实现

来源:互联网 发布:js设置select不可用 编辑:程序博客网 时间:2024/05/19 21:00

非递归与递归两种方法实现:

/**     * 二分查找:非递归的方法     * 缺点:有序数组中含有多个待查找的数值的时候,这种方法只能显示一个     * @param src  //带查找的有序数组     * @param des  //带查找的数值     * @return     //查找数值的下标,没有查找到返回-1      */    public int binarySearch(int[] src, int des) {        int begin = 0;        int end = src.length - 1;        while (begin <=end) {            int middle = begin + (end - begin) / 2;            if(des==src[middle])                return middle;            else if(des<src[middle]){                end=middle-1;            }            else if(des>src[middle]){                begin=middle+1;            }        }        return -1;    }    /**     * 递归的方法进行二分查找     * @param src     * @param des      * @param begin  //开始查找数组的下界     * @param end    //开始查找数组的上界     * @return       //查找数值的下标,没有查找到返回-1     */    public int binarySearch(int[] src,int des,int begin,int end){        int middle=begin+(end-begin)/2;        if(des<src[begin]||des>src[end]||begin>end){            return -1;        }        if(des<src[middle]){            return binarySearch(src,des,begin,middle-1);        }else if(des>src[middle]){            return binarySearch(src,des,middle+1,end);        }else {            return middle;        }    }

其时间复杂度为:O(log2n)

原创粉丝点击