A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张帅 黑马帝   /  2011-12-16 20:41  /  2891 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张帅 于 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;
                                }

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

8 个回复

倒序浏览
这有什么问题吗?
回复 使用道具 举报
没看出来!!
回复 使用道具 举报
张帅 黑马帝 2011-12-16 21:09:41
板凳
我调试了下,发现永远都返回 -1;
回复 使用道具 举报

本帖最后由 余松霖 于 2011-12-16 21:29 编辑
张帅 发表于 2011-12-16 21:09
我调试了下,发现永远都返回 -1;


你数组是什么    你要知道key值如果不在数组中  返回的都是-1
回复 使用道具 举报
张帅 发表于 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
复制代码

评分

参与人数 1黑马币 +1 收起 理由
张帅 + 1

查看全部评分

回复 使用道具 举报
张帅 黑马帝 2011-12-16 22:18:25
7#
monghuan 发表于 2011-12-16 21:12
正常的,
测试代码:测试结果:

我勒个晕,难道我系统出毛病了,我再排查下,谢谢了
回复 使用道具 举报
没问题呀,
回复 使用道具 举报
这里的min是应该从0开始还是应该从arr[0]开始???
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马