二分查找必须是己经排好序的数组。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
public class TwoFind {
public static void main(String args[]){
int[] num = {1,2,3,4,5,6,7,8,9};
int n=7;
System.out.println(find(num,n));
System.out.println(findBy(num,0,num.length-1,n));
}
//非递归
public static int find(int[] num,int n){
int front = 0;
int last = num.length-1;
while(front<=last){
int middle=(front+last)/2;
if(num[middle]>n){
last=middle-1;
}else if(num[middle]<n){
front=middle+1;
}else{
return middle;
}
}
return -1;
}
//递归
public static int findBy(int[] num,int front,int last,int n){
if(front<=last){
int middle=(front+last)/2;
if(num[middle]>n){
return findBy(num,front,middle-1,n);
}else if(num[middle]<n){
return findBy(num,middle+1,last,n);
}else{
return middle;
}
}
return -1;
}
}