代码
/** * 二分查找法 * @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
原文:https://www.cnblogs.com/shenwenbo/p/9302372.html