基本
public static int binarySearch(ArrayList<Integer> data,int left, int right, int value){
int mid = (left+right)/2;
int midValue = data.get(mid);
if(midValue == value)
return mid;
else if(left >= right)
return -1;
else {
if(midValue>value)
return BinarySearch.binarySearch(data,left,mid-1,value);
else
return BinarySearch.binarySearch(data,mid+1,right,value);
}
}
多个值
public static void binarySearchMore(ArrayList<Integer> data, int left,int right,int value,ArrayList<Integer> result){
int mid = (left+right)/2;
int midValue = data.get(mid);
if(midValue == value){
result.add(mid);
if(left >= right) {
return;
}
else {
int temp = mid;
while (--temp >= 0 && data.get(temp) == value){
result.add(temp);
}
temp = mid;
while (++temp<=data.size() && data.get(temp) == value){
result.add(temp);
}
}
}
else {
if(left >= right) {
return;
}
if(midValue>value)
BinarySearch.binarySearchMore(data,left,mid-1,value,result);
if(midValue<value)
BinarySearch.binarySearchMore(data,mid+1,right,value,result);
}
}