二分法(Bisection method) 即一分为二的方法. 设[a,b]为R的闭区间. 逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点.[2]

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。

基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较,

如果当前位置arr[k]值等于key,则查找成功;

若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];

若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],

直到找到为止,时间复杂度:O(log(n))[3] 。

给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下:

1 确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.

2 求区间(a,b)的中点c.

3 计算f(c). 图示

(1) 若f(c)=0,则c就是函数的零点;

(2) 若f(a)·f(c)<0,则令b=c;

(3) 若f(c)·f(b)<0,则令a=c.

(4) 判断是否达到精确度ξ:即若|a-b|<ξ,则得到零点近似值a(或b),否则重复2-4.

由于计算过程的具体运算复杂,但每一步的方式相同,所以可通过编写程序来运算。

Java语言

public int binarySearch(int[] data,int aim){//以int数组为例,aim为需要查找的数

int start = 0;

int end = data.length-1;

int mid = (start+end)/2;//a

while(data[mid]!=aim&&end>start){//如果data[mid]等于aim则死循环,所以排除

if(data[mid]>aim){

end = mid-1;

}else if(data[mid]

start = mid+1;

mid = (start+end)/2;//b,注意a,b

return (data[mid]!=aim)?-1:mid;//返回结果

刚刚查询:两分法 唐宁街 embarrassment 粗加工 探险家大冒险 水污染 类质同像 美国职棒大联盟最有价值球员奖 乐队指挥 木兰围场传奇 随心所欲 也不是 倒影杯 异步电动机 供给制 小熊座 五官端正 世界文化 ԬӢ 最南端 惊诧不已 赣榆县地震台 嬉皮未成年 自治旗 馋涎欲滴 清连高速杜步高架桥 堵决口 费利克斯·弗兰克福特 棚户区 Imperficti 彼得保罗 何积丰 中国史读本 复钙时间 文房四宝 电线杆 尼尔·斯蒂芬森 竹夹鱼南蛮渍 玫瑰巧克力慕斯 羟基喹啉 醉翁亭 中大型 傲然挺立 父辛爵 Camelliajaponica 护卫军 迷魂药 阿尔图瓦大学(阿拉斯) 合成洗涤剂 维修保养 发条兔 中共豫西特委旧址 泰晤士河 国家公务员申论金点锦囊 音乐演奏 破军升龙击 坎坷不平 Nasseri 历史文化遗产保护教育部工程中心 末世之圣二代 合乎逻辑 蓝色档案 Ĵ 草花 十二人 PlaneScape 树莓奶油小蛋糕 一品漫城三期 中央政府 动物捉迷藏 水青树 太原市工商行政管理局 火影之折剑 马赛克 吃不上 Perugia 满满的 音乐团体 城管妈妈
友情链接: 知道 电影 百科 好搜 问答 微信 值得买 巨便宜 天天特价 洛阳汽车脚垫 女装 女鞋 母婴 内衣 零食 美妆 汽车 油价 郑州 北京 上海 广州 深圳 杭州 南京 苏州 武汉 天津 重庆 成都 大连 宁波 济南 西安 石家庄 沈阳 南阳 临沂 邯郸 保定 温州 东莞 洛阳 周口 青岛 徐州 赣州 菏泽 泉州 长春 唐山 商丘 南通 盐城 驻马店 佛山 衡阳 沧州 福州 昆明 无锡 南昌 黄冈 遵义
© 2025 haodianxin 百科 消耗时间:0.067秒 内存2.51MB