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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赤魂者 中级黑马   /  2014-7-17 12:19  /  765 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class ArrayTest3
{
        public static void main(String[] args)
        {
               
            int[] arr= {3,4,5,6,7,8,9};
                int index=halfSerch(arr,10);
               
                System.out.println("index="+index);
        }
     /*
           折半查找:效率提高,但是数组要有序排列。
           原理:两数取中间,
         */
  public static int halfSerch(int[] arr,int key)
        {
           int min,max,mid;
           min = 0;
           max = arr.length;
           mid = (max+min)/2;
           while(arr[mid]!=key)
                {
                   if ( key>arr[mid])
                           min=mid+1;
                   else if (key<arr[mid])
                           max=mid-1;
                   if (min>max)
                           return -1;
                             
                   mid = (min+max)/2;
                   }
                  return mid;
                  
            }
如过key是10 那么为什么 输出的不是-1?而是:
D:\javadm\day04>java ArrayTest3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
        at ArrayTest3.halfSerch(ArrayTest3.java:21)
        at ArrayTest3.main(ArrayTest3.java:7)


3 个回复

倒序浏览
角标越界。
max = arr.length-1
回复 使用道具 举报
越界了。。。。。。。。。楼上正解
回复 使用道具 举报
王景琛 发表于 2014-7-17 12:26
角标越界。
max = arr.length-1

已验证!正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马