public class BinarySearch {
private BinarySearch(){}
// 使用递归实现二分查找法
public static <E extends Comparable<E>> int search(E[] data,E target){
return search(data,0,data.length-1,target);
}
public static <E extends Comparable<E>> int search(E[] data, int l, int r, E target) {
if(l > r){
return -1;
}
int mid = l + (r - l)/2;
if(data[mid].compareTo(target) == 0){
return mid;
}
if(data[mid].compareTo(target) < 0){
return search(data,mid + 1,r,target);
}
return search(data,l,mid - 1,target);
}
// 使用非递归实现二分查找法
public static <E extends Comparable<E>> int search2(E[] data,E target){
int l = 0,r = data.length - 1;
while(l <= r){
int mid = l + (r - l)/2;
if(data[mid].compareTo(target) == 0){
return mid;
}
if(data[mid].compareTo(target) < 0){
l = mid + 1;
}else{
r = mid - 1;
}
}
return -1;
}
public static void main(String[] args) {
Integer[] data = {12,14,56,78,88,90,123,666};
int index = BinarySearch.search2(data, 78);
System.out.println(index);
}
}
前提:二分查找法的前提是查找的数据必须是有序数组