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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 武超 黑马帝   /  2011-11-29 12:59  /  2050 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 武超 于 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.不知道到底是什么错误。

3 个回复

倒序浏览
因为你的MID一直是mid=(min+max)>>1,没有变化就return 了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
因为你少了个else       if.....if else......else   你没判断key = arr[mid]  的情况就返回了 mid

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
  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.         }
复制代码
用这个方法试试

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马