| 本帖最后由 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
}
}
 |