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