029day(二分查找的学习)
来源:互联网 发布:阿里云国际站网址 编辑:程序博客网 时间:2024/05/29 16:32
172210704111-陈国佳总结《2017年11月8日》【连续029天】
标题:二分查找的学习;
内容:A.观看MOOC11.2,11.3;
B.二分查找的原理与二分法相似;
(a).写一个函数BinarySeach,在包含size个元素的,从小到大排序的int数组a里查找元素p,如果找到则返回元素下标,如果找不到,则返回-1;
int BinarySearch(int a[],int size,int p)
{
int L=0; //查找区间的左端点;
int R=size-1; //查找函数的右端点;
while(L<=R){
int mid =L+(R-L)/2; //取查找区间正中元素的下标(如果区间长度为偶数,则取中间两个的前一个),之所以不用(R+L),是为了防止它超出int的范围;
if(p==a[mid])
return mid;
else if(p>a[mid])
L=mid+1;
else
R=mid-1;
}
return -1;
}
当int a[10]={1,2,23,56,57,58,59,70,71,78};
(b).写一个函数LowerBound,在包含size个元素的,从小到大排序的int数组a里查找比给定整数p小的,下标最大的元素,找到则返回其下标,找不到则返回-1;
int LowerBound(int a[],int size,int p)
{
int L=0;
int R=size-1;
int lastPos =-1; //到目前为止的最优解;
while(L<=R){
int mid=L+(R-L)/2;
if (a[mid]>p)
R=mid-1;
else{
lastPos =mid;
L = mid+1;
}
}
return lastPos;
}
数组如上:
(c).二分法求方程的根:运用零点定律和二分法;
求方程的一个根:f(x)=x^3-5x^2+10x-80=0
若根为a,则要求|f(a)|<=10^(-6)
double EPS =1e-6;
double f(double x){return x*x*x -5*x*x +10*x -80;
}
int main ()
{
double root,x1=0,x2=100,y;
root =x1+(x2-x1)/2;
y=f(root);
while(fabs(y)>EPS){
if(y>0) x2=root;
else x1=root;
root=x1+(x2-x1)/2;
y=f(root);
}
cout<<root;
}
若将输出改为printf("%.8f",root);
则
明日计划:练习查找例题;
- 029day(二分查找的学习)
- 查找(二):二分查找----<学习总结>
- 032day(STL中的二分查找算法)
- 浅谈数据的查找(二分查找)
- 二分查找(对半查找)的实现
- 二分查找的学习与使用
- C#学习笔记—数组的折半查找(二分查找)
- 基础算法学习(01)-二分查找
- 二分查找学习札记
- 二分查找学习札记
- 二分查找学习札记
- 【二分查找】学习总结
- 二分查找学习札记
- java学习-二分查找
- 二分查找理解学习
- 算法学习-二分查找
- C++学习二分查找
- 二分查找和递归的二分查找
- 帧间预测-AMVP 模式
- TMMi评估方法使用一次需要多少钱?
- 计算机网络之虚拟专用网VPN
- container_of和list_for_each_entry 及其相关函数的分析
- NO.18异常
- 029day(二分查找的学习)
- 数据库分库
- 文章标题
- 计算机网络之TCP协议与UDP协议
- JavaScript之Set 和 Map
- 从excel导入到 resource 文件
- 数据结构之--栈(Java代码)
- 运用递归实现计算器加减乘除带括号优先级算法
- PHP函数