//在数组array中查找元素a
//注意:array是一个有序数组
public static int biSearch(int []array,int a){
int lo=0;
int hi=array.length-1;
int mid;
while(lo<=hi){
//取中间位置mid
mid=(lo+hi)/2;
if(array[mid]==a){
return mid+1;
}else if(array[mid]<a){
lo=mid+1;
}else{
hi=mid-1;
}
}
return -1;
}
//在数组array中递归查找元素a,且指定了起始点
//注意:array是一个有序数组
public static int search(int []array,int a,int lo,int hi){
if(lo<=hi){
int mid=(lo+hi)/2;
if(a==array[mid]){
return mid+1;
}
else if(a>array[mid]){
return search(array,a,mid+1,hi);
}else{
return search(array,a,lo,mid-1);
}
}
return -1;
}
//在数组array中查找第一个元素a,且指定了起始点
//注意:array是一个有序数组
public static int biSearch(int []array,int a){
int n=array.length;
int low=0;
int hi=n-1;
int mid=0;
while(low<hi){
mid=(low+hi)/2;
if(array[mid]<a){
low=mid+1;
}else{
hi=mid;
}
}
if(array[low]!=a){
return -1;
}else{
return low;
}
}
//在数组array中查找最后一个元素a,且指定了起始点
//注意:array是一个有序数组
public static int biSearch(int []array,int a){
int n=array.length;
int low=0;
int hi=n-1;
int mid=0;
while(low<hi){
mid=(low+hi+1)/2;
if(array[mid]<=a){
low=mid;
}else{
hi=mid-1;
}
}
if(array[hi]!=a){
return -1;
}else{
return hi;
}
}