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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Mra

中级黑马

  • 黑马币:20

  • 帖子:74

  • 精华:0

© Mra 中级黑马   /  2015-3-11 22:01  /  2310 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
  1. public class firstday
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int [] a  = {3,5,7,9,11,23,56,78};
  6.                 int d = getIndex(a,9);
  7.                 System.out.print(d);
  8.         }
  9.         public static int getIndex(int[] x ,int b)
  10.         {
  11.                 int min=0;
  12.                 int max = x.length-1;
  13.                 int mid = (x.length-1+0)/2;
  14.                
  15.                 while(max>=mid)
  16.                 {
  17.         mid = (max+min)/2; // 这条代码放这 可以正常运行
  18.                         if(b>x[mid])
  19.                                 min = mid+1;       
  20.                         else if(b<x[mid])
  21.                                 max = mid-1;
  22.                         else
  23.                                 return mid;
  24.                 //mid = (max+min)/2; / /这条代码写后 程序会死循环
  25.                
  26.                 }
  27.                 return -1;
复制代码

求解释-- 。。。

最佳答案

查看完整内容

这个程序没有什么可以正常用的,但while中的 mid = (max+min)/2;可以不用,因为在循环之前就已经通过 int mid = (x.length-1+0)/2;执行了。而且 if(b>x[mid]) min = mid+1; else if(b

3 个回复

倒序浏览
这个程序没有什么可以正常用的,但while中的 mid = (max+min)/2;可以不用,因为在循环之前就已经通过 int mid = (x.length-1+0)/2;执行了。而且 if(b>x[mid])
                                min = mid+1;        
                        else if(b<x[mid])
                                max = mid-1;
                        else
回复 使用道具 举报
上面按错了,补充一下,觉得if语句中min=mid;min=max就好了,还可以少一步运算提高效率。:)
回复 使用道具 举报
谢谢!解决了我的疑问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马