/**
* 递归
*
* @param a
* @param l
* @param r
* @return
*/
static int binarySearch(int[] a, int l, int r) {
if (l > r) {// 这里为什么不加等号呢? 因为 l == r 的情况也要进行一次判断看是否符合条件
return -1;
}
int mid = (l + r) / 2;
if (x == a[mid]) {
return mid;
} else if (x < a[mid]) {
return binarySearch(a, mid + 1, r);
} else {
return binarySearch(a, l, mid - 1);
}
}
/**
* 非递归
*
* @param a
* @param l
* @param r
* @return
*/
static int binarySearch1(int[] a, int l, int r) {
while (l <= r) {
int mid = (l + r) / 2;
if (x == a[mid]) {
return mid;
} else if (x < a[mid]) {
r = mid - 1;
} else {
l = mid + 1;
}
}
return -1;
}