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

代码

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

猜你喜欢

转载自www.cnblogs.com/shenwenbo/p/9302372.html
今日推荐