前言
使用二分查找,前提是数组有序且支持随机访问。
二分查找原始版
原始版的二分查找,通常用来判断数组中是否存在指定的数。
public static boolean binarySearch(int[] array,int k){
int low = 0;
int high = array.length-1;
while(low<=high){//有等号哦
int middle = low + (high-low)/2;
if(array[middle]==k)
return true;
else if(array[middle]<k)
low = middle+1;
else
high = middle-1;
}
return false;
}
二分查找返回第一个k的下标
public static int findFirst(int[] array,int k){
int low = 0;
int high = array.length-1;
while(low<=high){//注意,有等号
int middle = low + (high-low)/2;
if(array[middle]>=k)
high = middle-1;
else
low = middle+1;
}
if(low<array.length && array[low]==k)
return low;
return -1;
}
二分查找返回最后一个k的下标
public static int findLast(int[] array,int k){
int low = 0;
int high =array.length-1;
while(low<=high){//注意,有等号
int middle = low + (high-low)/2;
if(array[middle]>k)
high = middle-1;
else
low = middle+1;
}
if(high>=0 && array[high]==k)
return high;
return -1;
}