黑马程序员技术交流社区

标题: 请教:折半查找中遇到的问题 [打印本页]

作者: 武超    时间: 2011-11-29 12:59
标题: 请教:折半查找中遇到的问题
本帖最后由 武超 于 2011-11-30 13:36 编辑
  1. class ArrayTest5  //数组,折半查找
  2. {
  3.         public static void main(String [] args)
  4.         {
  5.                 int [] arr={1,5,8,13,25,34,46,52};
  6.                 int index=halfSearch(arr,8);
  7.                 System.out.print(index);
  8.         }public static int halfSearch(int [] arr,int key)
  9.         {
  10.                 int mid;
  11.                 int min=0;
  12.                 int max=arr.length-1;
  13.                 while(min<=max)
  14.                 {
  15.                         mid=(min+max)>>1;

  16.                         if(key>arr[mid])
  17.                                 min=mid+1;
  18.                         else if(key<arr[mid])
  19.                                 max=mid-1;
  20.                         return mid;
  21.                 }
  22.                 return -1;
  23.         }
  24. }
复制代码
这是在数组中用折半查找的方法查找一个数字,程序代码我检查了好多遍也没找到错误,可是无论是查找什么数,打印出来的都是3.不知道到底是什么错误。
作者: 应国炎    时间: 2011-11-29 13:07
因为你的MID一直是mid=(min+max)>>1,没有变化就return 了
作者: xiaolij3s    时间: 2011-11-29 15:43
因为你少了个else       if.....if else......else   你没判断key = arr[mid]  的情况就返回了 mid
作者: 刘永昌    时间: 2011-11-29 16:24
  1.         public static int halfSearch(int [] arr,int key){
  2.                 int min=0,max=arr.length-1,mid=(min+max)>>1;
  3.                 while(key!=arr[mid]){
  4.                         mid=(min+max)>>1;
  5.                         if(key>arr[mid])
  6.                                 min=mid+1;
  7.                         else if(key<arr[mid])
  8.                                 max=mid-1;
  9.                         if(max<min)
  10.                                 return -1;
  11.                 }
  12.                 return mid;
  13.         }
复制代码
用这个方法试试





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2