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);
}
}
前提:二分查找法的前提是查找的数据必须是有序数组
二分查找算法解析
本文介绍了二分查找算法的两种实现方式:递归与非递归,并提供了具体的Java代码示例。强调了二分查找适用于有序数组的前提条件。
1058

被折叠的 条评论
为什么被折叠?



