黑马程序员技术交流社区

标题: 折半查找不知道那里错了,兄弟们帮忙看看 [打印本页]

作者: ぺsimon☆    时间: 2013-5-13 19:32
标题: 折半查找不知道那里错了,兄弟们帮忙看看
本帖最后由 ぺsimon☆ 于 2013-5-14 16:22 编辑
  1. /*
  2. 这是一个折半查找的程序
  3. */

  4. class ZheBan
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.         int[] arr={3,22,55,66,33,36,8,90,110};

  9.         int key=36;
  10.         System.out.println(zheBan(arr,key));
  11.         }

  12.         public static int zheBan(int[] arr,int key)
  13.         {
  14.         
  15.         
  16.         int min=0,mid;
  17.         int max=arr.length-1;

  18.         while(min<=max)
  19.         {
  20.         mid=(min+max)>>1;        

  21.         if(key>arr[mid])
  22.         min=mid+1;

  23.         else if(key<arr[mid])
  24.         max=mid-1;

  25.         else
  26.         return mid;

  27.         }

  28.         return -1;
  29.         }
  30. }
复制代码
运行结果居然是-1,没有找出错误啦,兄弟们帮帮忙


作者: 任江峰    时间: 2013-5-13 19:46
本帖最后由 任江峰 于 2013-5-13 19:50 编辑

折半查找有一个前提,进行查找的数组必须是有序的。
把你的数组该成下面有序的以后,可以成功折半查找。
  int[] arr={3,8,22,33,36,55,66,90,110};



QQ图片20130513194933.jpg (21.03 KB, 下载次数: 0)

运行结果

 运行结果

作者: 吴建昆    时间: 2013-5-13 19:50
你给的数组是无序的,排一下序先。
作者: 王靖远    时间: 2013-5-13 20:04
折半查找只能查找有序数组啊。不然怎么保证折半后的值是中间值。。。




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