择办查找好比一个猜字游戏,比如在1-100之内让你猜一个class Java
{
public static int half(int []arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if(min>max)
return -1;意味着找不到目标,如果把-1改成min就现实这个数在这个数组中的位置。
mid=(min+max)/2;取半继续找
}
return mid;
}
public static void main(String []args)
{
int []arr={1,2,3,4,5,6,7,8,9,10,11,12,13,14};
int dex=half(arr,12);
System.out.println("dex="+dex);
}
}
class Java
{
public static void main(String []args)
{
int []arr={1,2,3,4,5,6,7,8,9,10,11,12,13,14};
int dex=half(arr,12);
System.out.println("dex="+dex);
}
public static int half(int []arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(min<=max)
{ mid=(max+min)>>1;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else if(key==arr[mid])
return mid;
}
return -1;
}
}
数90。你先以一半为目标,猜50。机器会说你猜的小了,你会继续猜 在51-100之内。就是在正确的空间内除以2查找。
|