基本的二分查找
public int binarySearch(int []a ,int key){
int l = 0, h = a.length - 1, mid;
int p = -1;
while (l <= h) {
//System.out.println("l="+l+" h="+h);
mid = (l + h) >> 1;
if(key == a[mid]) return mid;
if(key > a[mid]) l = mid + 1;
else h = mid - 1;
}
return p;
}
//有重复元素找到重复元素最大那个的index,找不到则找到上界限index
public int binarySearchLast(int []a ,int key){
int l = 0, h = a.length - 1, mid;
int p = -1;
while (l <= h) {
mid = l + ((h-l) >> 1);
if(key > a[mid] && mid + 1 < a.length && key < a[mid + 1]) return mid + 1;
if(key >= a[mid]) {
l = mid + 1;
if(key == a[mid] && mid > p) p = mid;
}
else h = mid - 1;
}
return p;
}
参考:
http://blog.youkuaiyun.com/v_july_v/article/details/7093204