import java.util.ArrayList;
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1,5,7,10,11, 22, 33, 55, 66,66,66,66,66, 77, 88, 100};
//int index = binarySearch(100, arr, 0, arr.length-1);
//System.out.println("index="+index);
ArrayList<Integer> idxList = binarySearch2(66, arr,0,arr.length-1);
System.out.println(idxList);
}
public static int binarySearch(int findVal, int[] arr, int left, int right){
int mid = (left+right)/2;
if(left > right){
return -1;
}
if(findVal > arr[mid]){
return binarySearch(findVal,arr, mid+1, right);
}else if(findVal < arr[mid]){
return binarySearch(findVal,arr, left, mid-1);
}else{
return mid;
}
}
/*
* 当一个数组中有多个相同的数值时,如何将所有的数值都查找到?如下
*/
public static ArrayList<Integer> binarySearch2(int findVal, int[] arr, int left, int right){
int mid = (left+right)/2;
if(left > right){
return new ArrayList<Integer>();
}
ArrayList<Integer> idxList = new ArrayList<Integer>();
if(findVal > arr[mid]){
return binarySearch2(findVal,arr, mid+1, right);
}else if(findVal < arr[mid]){
return binarySearch2(findVal,arr, left, mid-1);
}else{
int tmp = mid-1;
while(true){
if(tmp <0 || arr[tmp] != findVal){
break;
}
idxList.add(tmp);
tmp -= 1;
}
idxList.add(mid);
tmp = mid+1;
while(true){
if(tmp > right || arr[tmp] != findVal){
break;
}
idxList.add(tmp);
tmp += 1;
}
return idxList;
}
}
}