(二分查找只适合有序数组)
查找有序数组中某个数在数组中的位置(角标)
public class ArrayFind {
public static void main(String[] args) {
int[] arr = {12,23,34,45,56,67,78};
int a=halfSearch2(arr,34);
System.out.println(a);
}
//折半查找(二分查找)
public static int halfSearch(int[] arr,int key){
int max=arr.length-1;
int min=0;
int mid = (min+max)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
min=mid+1;
}else if(key<arr[mid]){
max=mid-1;
}
if(max<min)
return -1;
mid=(max+mid)/2;
}
return mid;
}
//方法二
{
int max,min,mid;
min = 0;
max = arr.length-1;
while(min<=max)
{
mid = (max+min)>>1; //右移1位相当于该数据除以2的一次方
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return min-1;
}
}