本帖最后由 yekong262 于 2014-1-22 10:49 编辑
- int [] arr={1,5,6,7};给定一个函数。假如key=8这个函数如何在下面循环中运行的 代码运行顺序。。
复制代码
- public static int halfSearch(int [] arr,int key)
- {
- int max ,min,mid;
- max=arr.length-1;
- min=0;
- mid=(max+min)/2;
- while (key!=arr[mid])
- {
-
- if (key>arr[mid])
- min=mid+1;
- else if (key<arr[mid])
- max=mid-1;
-
- mid=(max+min)/2;
-
- }
- return mid;
复制代码 int [] arr={1,5,6,7};
max=3
min=0
mid=3+0/2=1
第一次运行;8!=arr[1]=5 8>5
min=1+1
mid=2+3/2=2
第2次运行; 8!=arr[2]=6
8>6
min =2+1
mid=3+3/2=3
第3次运行; 8!=arr[3]=7
8>7
min=3+1
mid=4+3/2=3
第4次运行; 8!=arr[3]=7
8>7
min=3+1
mid=4+4/2=4
第5次运行;8!=arr[4]这个时候角标已经越界。怎么还能运行
8>arr[4] 没有这个角标。
|