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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ぺ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,没有找出错误啦,兄弟们帮帮忙

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 任江峰 于 2013-5-13 19:50 编辑

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



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

运行结果

 运行结果

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你给的数组是无序的,排一下序先。
回复 使用道具 举报
折半查找只能查找有序数组啊。不然怎么保证折半后的值是中间值。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马