/*
需求:折半查找某元素
思路:通过不断的折半,找到目标元素
步骤:
1.min=0;max=length-1;mid=(min+max)/2
2.如果mid比key大,那么max改变问mid-1
如果mid比key小,min改为mid+1
3.找到就立即结束,如果min比max大,那就找不到,返回-1
*/
class HalfSearch
{
public static void main(String[] args)
{
int [] arr={1,2,3,6,7,9};
int result=getIndex(arr,1);
System.out.println(result);
}
//遍历查找
public static int travelSearch(int [] arr,int key)
{
for(int i=0;i<arr.length;i++)
{
if(arr[i]==key)
{
return arr[i];
}
}
return -1;
}
//折半查找
public static int halfSearch(int [] arr,int key)
{
int min=0,max=arr.length-1,mid=(min+max)/2;
while(min<=max)
{
if(arr[mid]<key)
min=mid+1;
else if(arr[mid]>key)
max=mid-1;
else
return arr[mid];
mid=(min+max)/2;
}
return -1;
}
//折半查找插入的位置
public static int getIndex(int [] arr,int key)
{
int min=0,max=arr.length-1,mid;
if(min<=max)
{
mid=(min+max)>>1;
if(arr[mid]<key)
min=mid+1;
else if(arr[mid]>key)
max=mid-1;
else
return mid;
}
return min;
}
}