1>查找第一个值等于给定值的元素
列:
我们用二分法查找的时候首先拿8与a[4]进行比较,发现a[4]<8,所以在a[5]与a[9]之间查找,8与a[7]进行比较,发现刚好相等就返回,但是我们需要的是查找第一个值等于给定值的元素,意思就是我们需要查找的元素是a[5]
public int bsearch(int[] a,int n,int value){
int low = 0;
int heigh = n-1;
while(low <= heigh){
int mid = low +((heigh-low) >> 1);
if(a[mid] > value){
heigh = mid-1;
}else if(a[mid] < value){
low = low +1;
}else{
if((mid==0) &&( a[mid-1] != value)){
return a[mid];
}else{
high = mid-1;
}
}
}
return -1;
}
2>查找最后一个值等于给定的值
public int bsearch(int[] a,int n,int value){
int low = 0;
int heigh = n-1;
while(low <= heigh){
int mid = low +((heigh-low) >> 1)
if(a[mid] > value){
heigh = mid-1;
}else if(a[mid] < value){
low = mid +1
}else{
if((mid==0) && (a[mid+1] != value)) {
return a[mid]
}else{
low = mid +1;
}
}
}
return -a;
}
3>查找第一个值等于大于给定的值
public int bsreach(int[] a,int n,int value){
int low = 0;
int heigh = n-1;
while(low <= heigh){
int mid = low + ((heigh-1) >> 1);
if(a[mid] >= value){
if(mid==0 || (a[mid-1] < value)){
return a[mid]
}else{
heigh = mid-1
}
}else{
low = mid+1
}
}
return -1;
}
4>查找最后一个值小于等于给定元素的值,这里的代码我就不写,我在网上找一个,作为参考
总结.二分法查找几种重要的变形问题已经圆满结束,有疑问的朋友可以留言.