package SearchTest;
public class binarySearch {
public static int binarySearch0(int [] a,int left,int right,int val){
if(left>right||a==null) return -1;
while(left<=right){
int mid=(left+right)/2;
if(a[mid]==val) return mid;
else if(a[mid]>val) right=mid-1;
else left=mid+1;
}
return -1;
}
public static int binarySearch1(int [] a,int left,int right ,int val){
if(left>right||a==null) return -1;
while(left<right-1){
int mid=(left+right)/2;
if(a[mid]>val) right=mid-1;
else left=mid;
}
if(a[right]==val) return right;
else if(a[left]==val) {
return left;
}
return -1;
}
public static int binarySearch2(int [] a,int left,int right ,int val){
if(left>right||a==null) return -1;
while(left<right-1){
int mid=(left+right)/2;
if(a[mid]<val) left=mid+1;
else right=mid;
}
if(a[left]==val) return left;
else if(a[right]==val) {
return right;
}
return -1;
}
public static int binarySearch3(int [] a,int left,int right ,int val){
if(left>right||a==null) return -1;
while(left<right-1){
int mid=(left+right)/2;
if(a[mid]<val) left=mid+1;
else right=mid;
}
if(a[left]>=val) return left;
else if(a[right]>=val) {
return right;
}
return -1;
}
public static int binarySearch4(int [] a,int left,int right ,int val){
if(left>right||a==null) return -1;
while(left<right-1){
int mid=(left+right)/2;
if(a[mid]<=val) left=mid+1;
else right=mid;
}
if(a[left]>val) return left;
else if(a[right]>val) {
return right;
}
return -1;
}
public static int binarySearch5(int [] a,int left,int right ,int val){
if(left>right||a==null) return -1;
while(left<right-1){
int mid=(left+right)/2;
if(a[mid]>=val) right=mid-1;
else left=mid;
}
if(a[right]<val) return right;
else if(a[left]<val) {
return left;
}
return -1;
}
public static int binarySearch6(int [] a,int left,int right ,int val){
if(left>right||a==null) return -1;
while(left<right-1){
int mid=(left+right)/2;
if(a[mid]>val) right=mid-1;
else left=mid;
}
if(a[right]<=val) return right;
else if(a[left]<=val) {
return left;
}
return -1;
}
public static void main(String[] args) {
int[] a = { 1,2,2,3,3,3,5,5,6,6,7,7};
System.out.println("目标值2在数组中的位置为:"+binarySearch0(a,0,a.length-1,2));
System.out.println("目标值2在数组中最后一次出现的位置为:"+binarySearch1(a,0,a.length-1,2));
System.out.println("目标值2在数组中第一次出现的位置为:"+binarySearch2(a,0,a.length-1,2));
System.out.println("第一个大于等于目标值2的的位置为:"+binarySearch3(a,0,a.length-1,2));
System.out.println("第一个大于目标值2的的位置为:"+binarySearch4(a,0,a.length-1,2));
System.out.println("第一个小于目标值2的的位置为:"+binarySearch5(a,0,a.length-1,2));
System.out.println("第一个小于等于目标值2的的位置为:"+binarySearch6(a,0,a.length-1,2));
}
}
结果:
目标值2在数组中的位置为:2
目标值2在数组中最后一次出现的位置为:2
目标值2在数组中第一次出现的位置为:1
第一个大于等于目标值2的的位置为:1
第一个大于目标值2的的位置为:3
第一个小于目标值2的的位置为:0
第一个小于等于目标值2的的位置为:2