二分查找思想:将有序序列按照中间位置分为两半,如果中间元素与待查找元素相等,则返回;
如果中间元素小于待查找元素,则在右半边查找;否则在左半边查找。
Java递归实现:
public static int find(int[] a,int begin,int end,int b){
if(begin==end){
if(a[begin]==b) return begin;
return -1;
}
int mid=(begin+end)/2;
if(a[mid]==b) return mid;
else if(a[mid]>b){
return find(a,begin,mid-1,b);
}else{
return find(a,mid+1,end,b);
}
}
Java非递归实现:
public static int find(int[] a,int b){
int left=0;
int right=a.length-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]==b){
return mid;
} else if(a[mid]>b){
right=mid-1;
}else{
left=mid+1;
}
}
return -1;
}