1)mid 向下取整
while( left < right)
{
int mid = (right - left)/2 + left;
if( check(mid) )
{
left = mid + 1;
}
else
{
right = mid;
}
}
會把 [left, right]分成 [mid +1, right], [left, mid]兩個區間。
如果 [left,right]只有兩個元素,則 mid == left,下一次搜索的話,left < right不滿足,能退出
2)mid向上取整:
while( left < right)
{
int mid = (right - left + 1) /2 + left;
if( check(mid))
{
right = mid -1;
}
else
{
left = mid;
}
}
搜索區間[left, right]會被分割成 [left, mid-1], [mid, right]兩個。
當只有兩個元素的時候, mid = == right, 那麼 left < right也不滿足,從而能退出。