Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1008791
  • 博文数量: 327
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4319
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 11:21
文章存档

2011年(31)

2010年(139)

2009年(157)

我的朋友

分类: C/C++

2009-05-31 19:41:11

二分法的基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x作比较。如果x==a[n/2],则终止。如果xa[n/2],则只需在右半部分搜索。

二分法,一般地,对于函数f(x),如果存在实数c,当x=c是f(c)=0,那么把x=c叫做函数f(x)的零点。
解方程即要求f(x)的所有零点。
先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],
现在假设f(a)<0,f(b)>0,a如果f[(a+b)/2]=0,该点就是零点,
如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,按上述方法在求该区间中点的函数值,这样就可以不断接近零点
如果f[(a+b)/2]>0,同上
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。

前提条件是,二分法的数组是一个有序数列。所以在使用二分法的时候,会使用排序法先排序。
程序伪代码:
public int search(int[] array,int 查找对象){
return search(array,查找对象,0,数组长度);
}

public int search(int[] array,int 查找对象,int 起始位置 , int 结束位置){
如果 起始位置 == 结束位置 
返回 0;
取中间值
如果 array[中间值]  == 查找对象
返回 中间值;
如果 array[中间值] > 查找对象
返回 search(array,查找对象,中间值 + 1,结束位置);
返回 search(array,查找对象,起始位置,中间值 - 1);
}
阅读(3990) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~