递归方式:
public class BS {
public int binarySearch(int elem,int[] array,int low,int high){
if (low>high){
return -1;
}
int middle=(low+high)/2;
if (array[middle]==elem){
return middle;
}
if (array[middle]<elem){
//找右边
return binarySearch(elem,array,middle+1,high);
}
if (array[middle]>elem){
//找左边
return binarySearch(elem,array,low,middle-1);
}
return -1;
}
public static void main(String[] args){
BS bs = new BS();
int[] array={3,5,6,7,8,9,4,2,1,31,5,6,7,8,10};
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
if (i==array.length-1){
System.out.println(array[i]);
}else {
System.out.print(array[i] + ",");
}
}
int search = bs.binarySearch(10, array, 0, array.length-1);
System.out.println(search);
}
}
非递归方式:
public int directBinarySearch(int[] array,int elem){
int low=0;
int high=array.length-1;
while (low<=high){
int middle=(low+high)/2;
if (elem>array[middle]){
//右边找
low=middle+1;
}else if (elem<array[middle]){
high=middle-1;
}else {
return middle;
}
}
return -1;
}