一共三种方案
package com.***.test;
public class BinarySearch1 {
/**
* 相同数时返回右边查到的数
*/
public static int binarySearchRight (int [] arr,int target){
int low=0 ;
int high=arr.length;
while (low < high){
int mid=(low+high)/2 ;
if (target < arr[mid])
high--;
else
low++;
}
if (arr[high-1 ]==target)
return high-1 ;
else
return -1 ;
}
/**
* 相同数时返回左边查到的数
*/
public static int binarySearchLeft (int [] arr,int target){
int low=0 ;
int high=arr.length;
while (low < high){
int mid=(low+high)/2 ;
if (target <= arr[mid])
high--;
else
low++;
}
if (arr[high]==target)
return high;
else
return -1 ;
}
/**
*找的直接返回
*/
public static int binarySearch (int [] arr,int target){
int low=0 ;
int high=arr.length;
while (low < high){
int mid=(low+high)/2 ;
if (target == arr[mid])
return mid;
else if (target <arr[mid])
high--;
else
low++;
}
return -1 ;
}
public static void main (String[] args) {
int [] arr={1 ,2 ,2 ,5 ,5 ,8 ,9 ,12 };
System.out.println(binarySearchRight(arr,10 ));
System.out.println(binarySearchLeft(arr,10 ));
System.out.println(binarySearch(arr,10 ));
}
}