第一种 l > r 时跳出循环,可能跳出范围故尾部范围,故减一。而第二种 l == r 时跳出循环,全在范围内。
int binary (int *num, int start, int end, int x) {
int l = start, r = end-1;
while(l <= r) {
int mid = (l+r) >> 1;
if(num[mid] <= x)
l = mid + 1;
else
r = mid - 1;
}
return l;
}
int binary (int *num, int start, int end, int x) {
int l = start, r = end;
while(l < r) {
int mid = (l+r) >> 1;
if(num[mid] <= x)
l = mid + 1;
else
r = mid;
}
return l;
}