C++ primer(第五版) 练习 3.26
题目:在100页的二分搜索程序中,为什么用的是 mid=beg+(end-beg)/2,而非mid = (beg+end)/2; ?
书上的二分搜索程序代码如下:
//text 为有序序列
//beg 和 end表示我们的搜索范围
auto beg = text.begin(), end = text.end();
auto mid = text.begin()+(end-beg)/2;
while(mid != end && *mid != sought)
{
if(sought<*mid)
end=mid;
else
beg=mid+1;
mid=beg+(end-beg)/2;
}
答:
个人认为以下图片(图片比较丑)可以解释这个: