/**
* 递归二分搜索
* @param a 待搜索数组,该数组假设为升序数组。
* @param l 待搜索数组的最小下标
* @param r 待搜索数组的最小下标
* @param x 所查找的数值
* @return 返回数组中元素的位置,如果没有该元素,返回-1
*/
private int recursiveSearch(int[] a,int l,int r,int x){
int rt = 0;
if (l <= r){
int middle = (l+r)/2;
if (a[middle] == x){
rt = middle;
}else if (a[middle]< x){
rt = recursiveSearch(a,middle+1,r,x);
}else if (a[middle] > x){
rt = recursiveSearch(a,l,middle-1,x);
}
}else{
rt = -1;
}
return rt;
}
/**
* 非递归二分查找
* @param a 待搜索数组,该数组假设为升序数组。
* @param x 所查找的数值
* @return 返回数组中元素的位置,如果没有该元素,返回-1
*/
private int plainSearch(int[] a,int x){
int left = 0;
int right = a.length - 1;
while (left <= right){
int middle = (left + right)/2;
if (a[middle] == x){
return middle;
}else if (a[middle] > x){
right = middle -1;
}else if(a[middle] < x){
left = middle + 1;
}
}
return -1;
}