二分法中間值的選擇

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也不滿足,從而能退出。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章