julycoding / The-Art-Of-Programming-By-July-2nd

本项目曾冲到全球第一,干货集锦见本页面最底部,另完整精致的纸质版《编程之法:面试和算法心得》已在京东/当当上销售

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

3.01 二分查找总结部分的表述错误.md

xingmot opened this issue · comments

这个也是错误的:

right = n   => while(left <  right) => right = middle;

如果搜索数组中不存在的数字的时候,可能会导致死循环.
因为最后left = middle, right = middle + 1,这样每次更新left和middle总是不变的.

此处代码我觉得缺少上下文,我实际演算了一下,如果是mid是向下取整的话,没什么问题,因为这样left一定会等于right(即找不到时要么left右移变为right,要么right左移变为left,就跳出了循环)。
此处代码意思我猜大概是:
mid向上取整的情况下,使用了right = n => while(left < right) => right = middle;
将会导致right=mid,然后恰好left=right-1,最后按照向上取整算mid=(right+right-1+1)/2=right,造成死循环。

仔细看了下,好奇怪,我下载的压缩包里的文章和直接github点进去的文章不一样。github里的文章是正常的。