黑马程序员技术交流社区

标题: java基础 折半查询函数 查询错误 请指正 [打印本页]

作者: 张帅    时间: 2011-12-16 20:41
标题: java基础 折半查询函数 查询错误 请指正
本帖最后由 张帅 于 2011-12-16 22:21 编辑

                                public static int halfSearch(int[] arr,int key){
                                        int min,max,mid;
                                        min = 0;
                                        max = arr.length-1;
                                        while(min<=max){
                                                mid = (min+max)>>1;
                                                if(key>arr[mid]){
                                                        min = mid +1;
                                                }else if(key<arr[mid]){
                                                        max = mid - 1;
                                                }else{
                                                        return mid;
                                                }
                                        }
                                        return -1;
                                }
作者: 刘基军    时间: 2011-12-16 21:02
这有什么问题吗?
作者: 余松霖    时间: 2011-12-16 21:03
没看出来!!
作者: 张帅    时间: 2011-12-16 21:09
我调试了下,发现永远都返回 -1;
作者: 余松霖    时间: 2011-12-16 21:12
标题:
本帖最后由 余松霖 于 2011-12-16 21:29 编辑
张帅 发表于 2011-12-16 21:09
我调试了下,发现永远都返回 -1;


你数组是什么    你要知道key值如果不在数组中  返回的都是-1
作者: 刘基军    时间: 2011-12-16 21:12
张帅 发表于 2011-12-16 21:09
我调试了下,发现永远都返回 -1;

正常的,
测试代码:
  1. class Test
  2. {
  3.   public static void main(String[] args)
  4.   {
  5.           int [] a ={1,2,3,5,7,8,9};
  6.           System.out.println(halfSearch(a,8));
  7.     System.out.println(halfSearch(a,6));

  8.    
  9.   }
  10.         public static int halfSearch(int[] arr,int key)
  11.         {
  12.                 int min,max,mid;
  13.                 min = 0;
  14.                 max = arr.length-1;
  15.                 while(min<=max){
  16.                       mid = (min+max)>>1;
  17.                       if(key>arr[mid]){
  18.                               min = mid +1;
  19.                       }else if(key<arr[mid]){
  20.                               max = mid - 1;
  21.                       }else{
  22.                               return mid;
  23.                       }
  24.                 }
  25.                 return -1;
  26.         }
  27. }
复制代码
测试结果:
  1. 5
  2. -1
复制代码

作者: 张帅    时间: 2011-12-16 22:18
monghuan 发表于 2011-12-16 21:12
正常的,
测试代码:测试结果:

我勒个晕,难道我系统出毛病了,我再排查下,谢谢了
作者: 北极£莜蓝    时间: 2014-6-5 18:17
没问题呀,
作者: 啦啦啦啦啦啦啦    时间: 2015-12-4 16:14
这里的min是应该从0开始还是应该从arr[0]开始???




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