1. 程式人生 > >簡單算法------二分查找法

簡單算法------二分查找法

font else clas 解析 pub 簡單算法 簡單 決定 查找

代碼

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

簡單算法------二分查找法