首页 > 编程语言 > 详细

简单算法------二分查找法

时间:2018-07-12 23:38:50      阅读:191      评论:0      收藏:0      [点我收藏+]

代码

/**
     *  二分查找法
     * @param arr
     * @param searchKey 
     * @return  未找到返回-1 找到则返回该下标
     */
    public int myBinarySearch(int arr[],int searchKey)
    {
        int lowerBound = 0;  //查找范围的最小下标
        int upperBound = arr.length-1;   //查找范围的最大下标
        int curIn;    //当前的下标 
        while(true)
        {
            curIn = (lowerBound + upperBound ) /2 ;  //当前下标为中间值
            if(arr[curIn] == searchKey)
                return curIn;
            else if(lowerBound> upperBound)
                return -1;
            else
            {
                if(arr[curIn] < searchKey)
                    lowerBound = curIn + 1;
                else
                    upperBound = curIn - 1;
            }
        } 
    }
    

 

模型: 猜数字游戏,例如:猜一个100以内的数字(值为33),

第一回合,猜50,返回结果,您猜的数字大了 

第二回合,你会根据反馈的结果往小的方向猜,也就是(0~50)  ,或许会猜 25; 返回结果您猜小了

第三回合,你会根据结果去猜一个25-50之间的数值,

第...N....回合 :根据反馈的结果越来越接近目标值(33)

 

解析: 

进入循环前  初始化中间坐标curIn 为数组大小的中间值

第一次 找到数组最中间的一个数字,如果这个数小于要查找的数   那么将查找范围的最小坐标 = 当前坐标+1  ,否则将最大坐标=当前坐标-1

由此折中查找,直到找到目标值

 

缺陷: 数组内的元素必须排序后才能使用二分查找法,根据元素排序的方式决定坐标范围  否则gameover

 

简单算法------二分查找法

原文:https://www.cnblogs.com/shenwenbo/p/9302372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!