二分查找的几种写法:
一:包含右边边界
private static int binarySearch(int a[],int target){
int left = 0;
int right =a.length-1;
while (left<=right){
int mid = left + (right-left)/2;
if(target<a[mid]){
right = mid-1;
}else if(target >a[mid]){
left = mid+1;
}else{
return mid;
}
}
return -1;
}
二:不包含右边边界
private static int binarySearch1(int a[],int left,int right,int target){
int i= left;
int j =right; //当右边取不到情况下
while (i<j){
int mid = i + (j-i)/2;
if(target<=a[mid]){ //取不到可以==
j = mid; //右边取不到 //右边取不到j
}else{
return i+1;
}
}
return -1;
}
三:如果有重复元素则用以下方法。
private static int binarySearch2(int a[],int target){
int i= 0;
int j =a.length-1; //当右边取不到情况下
while (i<j){
int mid = i + (j-i)/2;
if(target<a[mid]){
j = mid; //右边取不到
}else{
if(target==a[mid]){
j=mid;
}else{
i= mid+1;
}
}
}
if (a[i] == target)
return i;
else
return -1;
}