//将数分成[left,mid][mid+1,right]两部分,临界点mid在左半部分
int Bsearch_1(int left, int right)
{
while(left < right)
{
int mid = left+right >> 1; //当循环结束时,mid = left,临界点在左半部分
if(check(mid)) right = mid; //check(mid)为对中间值的判断条件
else left = mid+1;
}
return left; //返回临界点
}
//将数分成[left,mid-1][mid,right]两部分,临界点mid在左半部分
int Bsearch_2(int left, int right)
{
while(left < right)
{
int mid = left+right+1 >> 1; //当循环结束时,mid = right,临界点在左半部分
if(check(mid)) left = mid; //check(mid)为对中间值的判断条件
else right = mid-1;
}
return right; //返回临界点
}
欢迎大家探讨