二分法是思想精髓就是如果左下标和右下标得到的中间下标所在的值等于所要查找的值,算法结束;如果中间的值小于目标值,则说明目标值可能在中间值和右下标所在的区间内
,就将中间下标当成左下标,继续搜索。如果中间值大于目标值,则把中间下标当成右下标,继续搜索。
这是近期在网上用google搜索“二分法算法”找到的二分法算法。结果发现各种各样的缺陷。
用一个测试用例就能证明的这个算法错误。
很多人认为只要起始值的左值和右值相加为n-1就可以了。其实不然,二分法是10年多的时间才找到了一种正确的算法。如果你开始的左值设为0并且右值设为n-1程序
很大的程度上会错。除非你解决了最后的死循环问题。
但是,却在查找不存在的数上出了问题。比如6
下面的代码解决了这个问题:
但是上的这段真的解决了所有的问题?如果left + right 超过了整数范围?
这里解决了越界问题。但是这段代码真的没有问题了吗?没有人能保证。除非能用数学证明。
另外还有一种写法:但是必须特判length==0的情况否则一定会访问越界。
版权声明: 本博客所有文章除特别声明外,只能复制超链接地址,且必须注明出处!