class getIndex
{
public static void main(String[] args)
{
int[] arr = {1,3,5,7,9};
int index1 = getIndex(arr,2);
System.out.println("2应该放在数组中角标为"+index1+"的位置");
int index2 = getIndex(arr,8);
System.out.println("8应该放在数组中角标为"+index2+"的位置");
int index3 = getIndex(arr,7);
System.out.println("5应该放在数组中角标为"+index3+"的位置");
}
public static int getIndex(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while (min <= max)
{
mid = (min +max)>>1;
if (key <arr[mid])
{
max = mid -1;
}
else if (key > arr[mid])
{
min = mid + 1;
}
else
return mid;
}
return min;//毕老师在这儿用的返回值是min;
}
}
分析为什么会是min:
1、如果插入的是2,第1轮循环mid = 2,2<arr[2],然后max=1,min=0,mid = 0;
2、第2轮循环mid = 0,2>arr[0],然后min=max=1,mid=1;
3、第3轮循环mid=1,2<arr[1],然后max=0,min=1,min>max,结束循环,结束时min=1;
--------------------------------------------------------------------------
1、如果插入的是8,第1轮循环mid=2,8>arr[2],然后min=3,max=4,mid=3;
2、第2轮循环mid=3,8>arr[3],然后min=4,max=4,mid=4;
3、第3轮循环mid=4.8<arr[4],然后min=4,max=3,min>max,结束循环,结束时min=4
----------------------------------------------------------------------------
1、如果插入的是5,第1轮循环mid=2,5==arr[2],mid=2.return mid=2结束
但是经过分析,我觉得结束时min==mid,那么红字部分改为return mid理论上ok;
但是报错,可能尚未初始化变量mid??为什么会这么报错呢?大神请指教~
|