日期:2014-05-20  浏览次数:20613 次

学习java中
public   class   ArrayFinder{
    public   static   void   print(int[]   array,int   middle){
            for(int   i=0;i <array.length;i++){
                System.out.print(array[i]);
                if(i==middle)System.out.print( "* ");
                System.out.print( "     ");
            }

            System.out.println();
    }

    /**   采用二叉查找算法   */
    public   static   int   indexOf(int[]   array,   int   value){
      int   low=0;
      int   high=array.length-1;
      int   middle;

      while(low <high){
          middle=(low+high)/2;     //计算中间元素的索引
          print(array,middle);     //打印数组,用于跟踪查找过程
          if(array[middle]==value)return   middle;

          if(value <array[middle])
              high=middle;
          else
          low=middle;
      }
      return   -1;     //没有找到该元素,返回-1
    }

    public   static   void   main(String   args[]){
        int[]   array={4,5,6,7,9,13,17};
        System.out.println( "location   of   13:   "+indexOf(array,13));     //查找13在数组中的位置
    }
}


在书上拷了段程序,发现有点小问题,我查找indexOf(array,18)时候就会成死循环,indexOf(array,17)的时候也不行,谁帮忙优化下,让我学学。

------解决方案--------------------
我看过你的代码,原因在于middle = (low + high) / 2 ,因为对于int来说
( 5 + 6 )/2==( 5 + 5 )/2