java 实现二分查找法

来源:互联网 发布:新开的淘宝店怎么找货 编辑:程序博客网 时间:2024/05/22 10:48
/** * 二分查找又称折半查找,它是一种效率较高的查找方法。 * 【二分查找要求】: * 1.必须采用顺序存储结构 * 2.必须按关键字大小有序排列。 */public class SearchUtils {    /**     * 二分搜索:在整个数组中查找元素     * @param srcArray 原数组     * @param des 查找目标     * @return 返回元素所在索引,如果没查到,则返回-1     */    public static int binarySearch(int[] srcArray,int des){        int high = srcArray.length - 1;        int low = 0;        while (low <= high){            int middle = (low + high) / 2;            if(des == srcArray[middle]){                return middle;            }else if(des < srcArray[middle]){                high = middle - 1;            }else{                low = middle + 1;            }        }        return  -1;    }    /**     * 二分查找:在一定范围中查找元素     * @param srcArray 原数组     * @param des 查找目标     * @param beginIndex 开始索引     * @param endIndex 结束索引     * @return 返回元素所在索引,如果没查到,则返回-1     */    public static int binarySearch(int[] srcArray,int des,int beginIndex,int endIndex){        int middle = (beginIndex + endIndex) / 2;        if(des < srcArray[beginIndex] || des > srcArray[endIndex] || beginIndex > endIndex){            return -1;        }        if(des < srcArray[middle]){            return binarySearch(srcArray,des,beginIndex,middle-1);        }else if(des > srcArray[middle]){            return binarySearch(srcArray,des,middle+1,endIndex);        }else{            return middle;        }    }    /**     * 测试     * @param args     */    public static void main(String[] args) {        int[] src = new int[] {1, 3, 5, 7, 8, 9};        System.out.println(binarySearch(src, 3));        System.out.println(binarySearch(src,3,0,src.length-1));    }}
原创粉丝点击