二分搜索,指的是对已经排好序的数据进行搜索,也叫折半查找。下面我用递归和非递归实现了这一个算法
/**
* 二分搜索的递归实现
*
* @param a
* @param x
* @return
*/
public int BSearch(int[] a, int x) {
int left = 0, right = a.length - 1;
return search(a, x, left, right);
}
public int search(int[] a, int x, int left, int right) {
int mid = (left + right) / 2;
if(left>right){
return -1;
}
if (a[mid] == x) {
return mid;
}
if (a[mid] > x) {
return search(a, x, left, mid - 1);
}
else
return search(a, x, mid + 1, right);
}
/**
* 二分搜索的循环实现
*
* @param a
* @param x
* @return
*/
public int search(int[] a, int x) {
int left = 0, right = a.length - 1;
for (; left <= right;) {
int mid = (left + right) / 2;
if (a[mid] == x)
return mid;
if (a[mid] > x) {
right = mid - 1;
} else
left = mid + 1;
}
return -1;
}