曾经看过一篇博客,认为二分法如果选取不当的话,会导致死循环的。当时并不觉得,但是平时编程还是出现了死循环的错误。这回仔细想了想,就打算写篇博客,给自己的脑子拨乱反正吧!内容不多,却是干货。
二分法原理不多说,一般常用于查找,要求数组排序好。以C++为例,他给个数组a[10],但是我们应该怎么分配他的索引,即他的区间。
————————————————————————————————————————————
【强烈推荐】
在这里我建议索引中的 start=0, end=9+1 将这个数组表示为 [ start, end ) 的区间。
那么对于查找就可以是
while(start<end) //针对左闭右开的区间
{
mid=start+(end-start)/2;
当查找的数字在右半边时,那么 ans=mid; start=mid+1; //我们需要的ans就是要找的值,给它赋值ans=mid。用ans记录mid
当查找的数字在左半边时,那么 end=mid;
......
}
如此可以避免陷入死循环。。。。
——————————————————————————————————————
【也行吧,但个人不是很推荐】
又或者 start=0, end=9 将这个数组表示为 [ start, end ] 的区间
while(start<=end) //针对左闭右闭的区间
{
mid=start+(end-start)/2;
当查找的数字在右半边时,那么 start=mid+1;
当查找的数字在左半边时,那么 end=mid-1;
一定要有 当找到相等时,break;
}
这种也行吧。。。不过还是上种好点