实现二分法主要有一下两种:
while循环和递归。
package interview201505;
public class BinarySearch {
/**
* 二分查找算法
* while循环
*/
public static int binarySearch(int[] data, int find){
int low = 0;
int high = data.length-1;
while(low < high){
int mid = (low +high)/2;
if(find < data[mid]){
high = mid;
}else if(find > data[mid]){
low = mid;
}else if(find == data[mid]){
return mid;
}
}
return -1;
}
/**
* 二分法使用递归
*
*/
public static int binarySearch2(int[] data, int find,int low,int high){
int mid = (low+high)/2;
if(data[mid] < find){
return binarySearch2(data,find,mid+1,high);
}else if(data[mid] > find){
return binarySearch2(data,find,low,mid-1);
}else if (data[mid] == find){
return mid;
}
return -1;
}
public static void main(String[] args){
int[] data = {1,2,3,4,5,6,7};
System.out.println(binarySearch(data, 6));
System.out.println(binarySearch2(data, 6, 0, 6));
}
}