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

代码

/**
     *  二分查找法
     * @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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值