二分查找

作者: Mayo酱 | 来源:发表于2017-09-22 16:01 被阅读0次

    如果一个数组是无序的,那么可以通过简单遍历查找的方式查找到某个元素所在的角标。但是如果一个数组 是有序的,那么就可以通过一种更高效的方式达到相同的目的,也就是二分查找。

    思路:

    1、设置三个变量记录角标:min、max、mid。min初始值为0,max为数组最大角标,mid为 (max+min)/2。

    2、查看mid角标的元素是否与待查找的值相等,如果相等,则直接返回角标值,程序终止执行。

    3、如果待查找的值小于角标为mid的元素值,那么说明待查找的元素的位置可能在min与mid角标之间。设 置max = mid - 1,mid = (max + min)/2,重复第1、2步的操作。

    4、如果待查找的值大于角标为mid的元素值,那么说明待查找的元素的位置可能在mid与max角标之间。设 置min = mid + 1,mid = (max + min)/2,重复第1、2步的操作。

    5、如果数组中不存在待查找的元素,那么按照如上流程,最终min角标值会大于max角标值,此时返回-1。

    public static int binarySearch(Integer[] srcArray, int des) {
        //定义初始最小、最大索引
        int low = 0;
        int high = srcArray.length - 1;
        //确保不会出现重复查找,越界
        while ((low <= high) && (low <= srcArray.length - 1)
                && (high <= srcArray.length - 1)) {
            //计算出中间索引值
            int middle = (high + low)/2 ;
            if (des == srcArray[middle]) {
                return middle;
            //判断下限
            } else if (des < srcArray[middle]) {
                high = middle - 1;
            //判断上限
            } else {
                low = middle + 1;
            }
        }
        //若没有,则返回-1
        return -1;
    }
    

    相关文章

      网友评论

        本文标题:二分查找

        本文链接:https://www.haomeiwen.com/subject/ybyfextx.html