二分法(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;//返回结果

相关查询: 二分法 Bisection 一分为二 自然数
最新查询:十分相似 四川仙潭酒 甲骨文 烤金钱肉 红枣核桃牛肉卷 里程碑式 月亮天天代表我的心 室内设计 1793英国使团画家笔下的乾隆盛世:中国人的服饰和习俗图鉴 气象组织 中石化九江石化抗战纪念活动 函授学校 合金结构钢 电器设备 南北极 莱芜市无线电管理局 今文经 基于体素形态学分析 鸿篇巨制 波丽娜·塞米诺娃 鄂豫皖边区第一次工农兵代表大会旧址 在自由和力量中飞翔 企事业单位 中考英语作文得分策略全解全练 排行榜 弯弯绕 史朵巾 昆明市 可爱护士装 牛河梁遗址 Weinberg 绿菜花 梅花笑脸饼干 信教者 碱水湖 Liebheer 法式烤新西兰羊排 伍定远 二氧化氮 赣州环城高速公路 postdoctoral Bowling chez Denise 念念不忘 雅培 Acquisition 工况法 第一千 Versailles 压力锅 新西兰恒天然玉田牧场 大山祇神社 金字塔骗局 用户数 辣椒根鸡脚汤 劳动生产率 Cyberfront 生离死别 综合症 写实主义 推小车的人 衣冠文物 勒勒车 沈林仓 不讲方法 设计局 水门事件 文娱活动 洁白短小单孢菌 中等专业学校 IEF2010世界总决赛 电动垃圾清运车 凡尔纳四大科学幻想名著:海底两万里 怀孕圣经(第四版) 经济的坏脾气 谐波平衡法 暗黑启示录-亡灵崛起 壮志凌云 母亲,我用文字说我爱你 正切定理 两分法
友情链接: 知道 电影 百科 好搜 问答 微信 值得买 巨便宜 天天特价 洛阳汽车脚垫 女装 女鞋 母婴 内衣 零食 美妆 汽车 油价 郑州 北京 上海 广州 深圳 杭州 南京 苏州 武汉 天津 重庆 成都 大连 宁波 济南 西安 石家庄 沈阳 南阳 临沂 邯郸 保定 温州 东莞 洛阳 周口 青岛 徐州 赣州 菏泽 泉州 长春 唐山 商丘 南通 盐城 驻马店 佛山 衡阳 沧州 福州 昆明 无锡 南昌 黄冈 遵义
© 2025 haodianxin 百科 豫ICP备14030218号-3 消耗时间:0.050秒 内存2.84MB