牛顿二分法是数值计算当中一个非常重要的工具,本文所论述的是在整数集上进行搜索。使用前,需要说明一点,在利用二分法时搜索时,所给定的数据集一定是已经从小到大有序排列的,否则无法用该方法。
基本思路如下:让需要搜索的数(n)与左(left)、右(right)边界的中值比较。本文中,中值用mid表示,数学关系:mid = (left + right)/2。
如果 n 大于 mid,则 n 位于中值和右边界之间,更新左边界left = mid+1
如果 n 小于 mid,则 n 位于左边界和 中值之间,更新右边界 right = mid-1
如果 等于 mid,就找到了。
如果 n 不在给定整数集合里,就要结束循环。
因此,循环的条件是 left <= right。这也是,为什么要用left = mid+1或者 right = mid-1这样的语句来更新边界, 如果是left = mid或 left = right 则无法退出循环。
伪代码如下:
int BinaFind(int n,int left,int right) //整数集找,调用时给出左右边界
{
int mid;
while(left <= right) //控制条件
{
mid = (left + right)/2; //每次更新中值
if(n > mid) //在中值右边
left = mid + 1;
else if (n < mid) //在中值左边
right = mid - 1;
else //找到了
return mid;
}
return NULL; //已经是left > right,没找到
}