[图解算法] 二分查找Binary-Search——<递归与分治策略>
2024-08-26 17:08:42
#include"iostream.h" int BinarySearch(int a[],int left,int right,const int& x)
{
if(left<right)
{
int middle = (left+right)/;
if(x==a[middle]) return middle;
if(x>a[middle]) return BinarySearch(a,middle+,right,x);
else return BinarySearch(a,left,middle-,x);
}
} void main(){
int n,x,i,a[];
cout<<"input the length of a[]"<<endl;
cin>>n;
cout<<"input array a[]"<<endl;
for(i=;i<n;i++) cin>>a[i];
cout<<"input the num u want to find"<<endl;
cin>>x;
cout<<BinarySearch(a,,n-,x)+<<endl;
}
[图解+例子]
前提:有序数组。
一、建立数组
(共10个数)
二、传参
int a[] 数组
int left,int right 当前查找范围限定(left=0;right=n-1;10个数即n=10;left=0;right=9)
const int& x 待查找数值(假如查找27)
三、取中间值middle判断
如果27==7 返回当前middle值(0+9)/2=4
如果27>7查找右半段
if (x>a[middle]) return BinarySearch(a,middle+1,right,x); //设定右半段范围(right值不变middle+1)
如果27<7查找左半段
else return BinarySearch(a,left,middle-1,x);//设定左半段范围(left值不变middle-1)
当前查找右半段即 left=5;right=9
如果27==25 返回当前middle值(5+9)/2=7
……
……
如此继续递归调用BinarySearch函数
直到middle=(8+9)/2=8时 ;27==27;return middle
[特例]
如果要找元素在边上的话,如36,那么下一次就是left=9;right=9;自然middle也等于9。
[总结]
子问题:范围内取中值;递归不断缩小确定范围。
最新文章
- 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
- mvc 导入,导出excel
- How to build the theory on a specific system - may be just a brain storm[clue found]
- ios7 上 UIActivity 用的image
- bbed的使用--安装及初探
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
- 使用Fragment 实现动态UI 和 动态添加Fragment
- php文件上传之单文件上传
- geotools实现多边形的合并&;缓冲区
- Android开发学习之路--MAC下Android Studio开发环境搭建
- 树莓派.Raspberry Pi 3碰到";Unable to determine hardware version. I see: Hardware : BCM2835";错误的解决过程
- BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树
- 生成N位数字随机数
- PHP用post来进行Soap请求
- Linux中.rar文件解压
- 数据库操作类《SqlHelper》
- 线段树->;面积并 Atlantis HDU - 1542
- 使用maven构建scala项目
- HTML之DocType的几种类型
- C语言的基本构成
热门文章
- [代码]--ORA-01745: 无效的主机/绑定变量名 ORA-00917: 缺失的逗号 oracle日期格式错误
- GNU Emacs命令速查表
- 【题解】 [NOI2009]变换序列 (二分图匹配)
- bzoj 4631: 踩气球 线段树合并
- Installshield 打包安装程序时写入注册表,及运行bat文件
- IO编程(3)-序列化
- HTTP 返回的状态码 != 200 ,浏览器不会将返回的内容缓存到本地磁盘上
- 个推应用统计产品(个数)Android集成实践
- node.js原生后台进阶(一)
- <;meta content=&#39;IE=edge,chrome=1&#39; http-equiv=&#39;X-UA-Compatible&#39; />;