标签:arr right 边界 int 二分法 三种 key public left
随便找一个
public static int binarySearch(int[] arr,int key) {
int left=0,right=arr.length-1;
while(left<=right) {
int m=left+(right-left)/2;
if(arr[m]==key)
return m;
else if(arr[m]>key)
right=m-1;
else
left=m+1;
}
return left;
}
找左边界
public static int leftBinarySearch(int[] arr,int key) {
int left=0,right=arr.length-1;
while(left<right) {
int m=left+(right-left)/2;
if(arr[m]>=key)
right=m;
else
left=m+1;
}
return left;
}
找右边界
public static int rightBinarySearch(int[] arr,int key) {
int left=0,right=arr.length-1;
while(left<right) {
int m=left+(right-left)/2;
if(arr[m]<=key)
left=m;
else
right=m-1;
}
return right;
}
测试
public class 三种2分法 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {1,3,4,6,6,6,6,7,8,9};
System.out.println(binarySearch(arr,6));
System.out.println(leftBinarySearch(arr,6));
System.out.println(rightBinarySearch(arr,6));
}
public static int binarySearch(int[] arr,int key) {
int left=0,right=arr.length-1;
while(left<=right) {
int m=left+(right-left)/2;
if(arr[m]==key)
return m;
else if(arr[m]>key)
right=m-1;
else
left=m+1;
}
return left;
}
//寻找左边界
public static int leftBinarySearch(int[] arr,int key) {
int left=0,right=arr.length-1;
while(left<right) {
int m=left+(right-left)/2;
if(arr[m]>=key)
right=m;
else
left=m+1;
}
return left;
}
//寻找右边界
public static int rightBinarySearch(int[] arr,int key) {
int left=0,right=arr.length-1;
while(left<right) {
int m=left+(right-left)/2;
if(arr[m]<=key)
left=m;
else
right=m-1;
}
return right;
}
}
标签:arr,right,边界,int,二分法,三种,key,public,left 来源: https://blog.csdn.net/A2254536570/article/details/117886517
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。