簡單算法------二分查找法
阿新 • • 發佈:2018-07-13
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
簡單算法------二分查找法