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


    代码

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

  • 相关阅读:
    【Java基础】for循环
    【java基础】for循环一些小例子
    ELK日志搜索引擎
    Spring boot 环境搭建
    【java基础】三元运算符&语句结构
    【接口自动化】正则表达式
    mysql 数据库表的基本操作
    centos下安装jenkins
    问题 H: 例题5-8 Fibonacci数列
    数字特征值
  • 原文地址:https://www.cnblogs.com/shenwenbo/p/9302372.html
Copyright © 2020-2023  润新知