基础篇1——二分查找法
2015-08-31 13:06
260 查看
二分法即设头,尾,中三个变量以low,high,mid表示。mid=(low+high)/2,每次以mid对应的值进行比较,若索要查找的值>mid对应的值,则low=mid,反之high=mid。之后再以新的low,high求新的mid对应查找,直至找到。部分时候以high>=low作为条件避免重复查找。
类型一:二分法求解
例:8x^4+7x^3+2x^2+3x+6=y,输入y的值,求[0,100]的解
类型二:二分查找
例:例:X:待查找元素 n:元素个数 num[]单调递增数组
设num数组8 ,10 ,12 ,16,18,20,23,24,28,33,43,55 查找元素为24
low mid high
第一次比较 8 ,10 ,12 ,16,18,20, 23 ,24,28,33,43,55
low mid high
第二次比较 8 ,10 ,12 ,16,18,20, 23 ,24,28,33,43,55
low mid high
第三次比较 8 ,10 ,12 ,16,18,20, 23 , 24, 28 ,33,43,55
low mid
high //num[mid]==x break;
类型一:二分法求解
例:8x^4+7x^3+2x^2+3x+6=y,输入y的值,求[0,100]的解
#include <iostream> #include<stdio.h> using namespace std; int calculate(int x) { return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6; } int main() { int y; double high=100,low=0,mid; while(cin>>y) { while(low-high<1.0e-6) / /循环至high,low近乎相等 { mid=(high+low)/2; if(calculate(mid)<y) low=mid; else high=mid; } printf("%.4lf\n",high); } return 0; }
类型二:二分查找
例:例:X:待查找元素 n:元素个数 num[]单调递增数组
int high=n-1,low=0,mid; while(low<=high) { mid=(high+low)/2; if(num[mid]==x) break; if(num[mid]<x) low=mid; else high=mid; } cout<<mid<<endl;不写全了,领会即可。演示过程如下:
设num数组8 ,10 ,12 ,16,18,20,23,24,28,33,43,55 查找元素为24
low mid high
第一次比较 8 ,10 ,12 ,16,18,20, 23 ,24,28,33,43,55
low mid high
第二次比较 8 ,10 ,12 ,16,18,20, 23 ,24,28,33,43,55
low mid high
第三次比较 8 ,10 ,12 ,16,18,20, 23 , 24, 28 ,33,43,55
low mid
high //num[mid]==x break;
相关文章推荐
- Java暗箱操作之for-each
- windows下安装php5.5的redis扩展
- Calendar的使用
- HDU 5054 Alice and Bob——BestCoder Round #11(div.2)
- 微擎分页
- Java获取数据库的表中各字段的字段名等相关信息-很详细
- linux环境配置
- 有关于SQL SERVER的事务(随手笔记)
- Spring中Quartz调度器的使用 ----继承QuartzJobBean,不继承QuartzJobBean两种方式
- Spring MVC Controller 多方法
- WebStorm使用less
- INSTALL_FAILED_CONFLICTING_PROVIDER错误解决方法
- 将 paired count 和unpaired count 相加
- PHP ASCII码与字符串的相互转换
- 1041. Be Unique (20)
- BZOJ 3224: Tyvj 1728 普通平衡树 treap
- Android bitmap的拷贝以及平移旋转缩放等效果
- Spring+Quartz实现定时任务的配置方法--Cron表达式解释
- dom4j 读取某个元素的某个属性
- 零基础学python-10.1 序列赋值高级应用