zoukankan      html  css  js  c++  java
  • 简单算法------二分查找法

    代码

    /**
         *  二分查找法
         * @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 Class/Method
    Data Types in Java
    Java overview && JVM
    Interface Vs. Abstract Class
    【javascript】Object三种定义方式
    【C#】导出Excel
    【javascript】简单原型链、借用构造函数
    Mysql表编码查看修改
    asp.net的mvc?
    连表
  • 原文地址:https://www.cnblogs.com/shenwenbo/p/9302372.html
Copyright © 2011-2022 走看看