本帖最后由 風諾 于 2013-10-17 14:28 编辑
首先要明确数组是有序的,元素按照大小依次排好的
这样取中间值去和要查找的数作比较
比中间值大就往上找,比中间值小就往下找- public static int halfsearch(int[] arr,int key) {
- int min = 0,max = arr.length - 1,mid = (min + max)/2; //初始值的设定
- while(arr[mid] != key) {
- if(key < arr[mid]) //key值处在min和mid之间
- max = mid - 1; //那么key已经小于了arr[mid],只要在min~(mid-1)之间查找,因此新的max的值就是mid-1
- if(key > arr[mid]) //key值处在mid和max之间
- min = mid + 1; //那么key已经大于了arr[mid],只要在(mid+1)~max之间查找,因此新的min的值就是mid+1
- mid = (max + min)/2; //有了新的范围以后,就设定处在新范围中间的值为mid这样每次比较都缩小一半的范围
- }
- return mid;
- }
复制代码 若是数组中根本没有这个值,需要另作处理 |