黑马程序员技术交流社区

标题: 折半查找return不能用啊? [打印本页]

作者: 赤魂者    时间: 2014-7-17 12:19
标题: 折半查找return不能用啊?
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)



作者: 王景琛    时间: 2014-7-17 12:26
角标越界。
max = arr.length-1
作者: 天涯无痕    时间: 2014-7-17 12:49
越界了。。。。。。。。。楼上正解
作者: 赤魂者    时间: 2014-7-17 13:13
王景琛 发表于 2014-7-17 12:26
角标越界。
max = arr.length-1

已验证!正解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2