本帖最后由 feigecal 于 2012-7-1 00:39 编辑
折半查找是每次都用中间角标位置上的值mid和要查找 的值比较,如果小于要查找的值那么说明要查找的值在mid的右边,那么就把mid的角标加一的角标上的值做为最小值,再进行折半,如果mid大于要查找的值,那就把mid的角标减一的角标上的值做为最大值再进行折半,只所以max=arr.length-1,是因为arr.length是数组的长度,而数组的角标是从0开始的,所以最大角标就是长度减去1了。给你个例子看看- /**
- 用折半法在一个数组中查找指定的值在数组中的角标位
- */
- class ZheBan
- {
- public static void main(String[] args)
- {
- int [] arr={3,4,6,3,7,9,8,2};
- int a=chaZhao(arr,7);//调用查找功能
- System.out.println(a);
- }
- public static int chaZhao(int[] arr,int key)//定义一个功能,用于查找
- {
- int min,mid,max;
- min=0;
- max=arr.length-1;
- while(min<=max)
- {
- mid=(min+max)/2;
- if (key<arr[mid])
- {
- max=mid-1;
- }
- else if(key>arr[mid])
- {
- min=mid+1;
- }
- else
- return mid;
- }
- return -1;//数组中没有要查找的数时打印出-1
- }
- }
复制代码 |