折半查找
0 1 2 3 4 5 6 7 8
2 6 8 9 10 11 13 15 19
L m r
L=0;r=13;m=(l+m)/2=6;
判断ary【m】和输入n的关系
如果等于找到了
如果m>n r=m-1
如果m<n l=m+1
判断l>r是则无此项
/** *@param 参数一:查找的数组 参数二:要找的值 * */ public static int dichotomia(int[] arry,int key) { int min = 0; int max = arry.length() - 1; int mid = (min + max)>>1; //先选一般查看是否为查找值 while(arry[mid] != key) { if(arry[mid] < key){ //判断大小 改变最值来决定向上还是向下继续查找 min = mid +1; }else { max = mid -1; } mid = (min + max)>>1; //继续二分获取中间值 if(min > max || max < min){ //如果比最大值大 或比最小值小 说明没有 返回-1 return -1; } } return mid; }