向左向右 —折半查找(二分法)

折半查找

0   1  2  3  4   5    6     7    8   

2  6  8  9  10  11  13  15  19  

L          m            r

L=0r=13m=(l+m)/2=6;

判断arym】和输入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; }

  

posted @ 2020-09-02 12:49  特权E5  阅读(199)  评论(0编辑  收藏  举报