package offer08;
/**
* 二分查找,适合已经排好序的数组
* 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
* @author tcj
*
*/
public class BinarySearch {
//a是一个已经排好序的数组,这里假设为升序
//递归实现
public static int search(int x,int[] a,int start,int end){
int middle = (end+start)/2;
if(x < a[start] || x > a[end] || start > end){
return -1;
}
if(x < a[middle]){
return search(x,a,start,middle-1);
}else if(x == a[middle]){
return middle;
}
else{
return search(x,a,middle+1,end);
}
}
//循环实现
public static int search02(int x,int[] a){
int low = 0;
int high = a.length - 1;
while(low <= high){
int middle = (high + low)/2;
if(x == a[middle]){
return middle;
}else if(x < a[middle]){
high = middle - 1;
}else{
low = middle + 1;
}
}
return -1;
}
public static void main(String[] args){
int[] a = {1,2,3,4,5};
System.out.println(search(2,a,0,4));
//测试非递归
System.out.println(search02(5,a));
}
}
java 实现二分查找法
最新推荐文章于 2024-03-06 09:24:27 发布