//递归二分查找
public static int bSd(int[] arr,int a,int l,int r){
if(l<=r){
int mid=(l+r)/2;
if(arr[mid]==a){
return mid;
}
else if(arr[mid]>a){
return bSd(arr,a,l,mid-1);
}else{
return bSd(arr,a,mid+1,r);
}
}
return -1;
}
//非递归的二分查找
public static int bSnd(int[] arr,int a){
int l=0;
int r=arr.length-1;
while(l<=r){
int mid=(l+r)/2;
if(arr[mid]==a){
return mid;
}else if(a>arr[mid]){
l=mid+1;
}else{
r=mid-1;
}
}
return r;
}
//二分查找找到元素最后出现的位置
public static int lastbSnd(int[] arr,int a){
int left=0;
int right=arr.length-1;
while(left < right)
{
int mid = (left + right)/2;
if(arr[mid] > a)
right = mid -1;
else
left = mid;
}
if(arr[left] == a)
return left;
else
return -1;
}
//二分查找找到元素第一次出现的位置
public static int firstbSnd(int[] arr,int a){
int left=0;
int right=arr.length-1;
while(left < right)
{
int mid = (left + right)/2;
if(arr[mid] < a)
left = mid +1;
else
right = mid;
}
if(arr[right] == a)
return right;
else
return -1;
}
二分查找
最新推荐文章于 2024-06-11 09:15:00 发布