#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。

[总结]

子问题:范围内取中值;递归不断缩小确定范围。

最新文章

  1. 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
  2. mvc 导入,导出excel
  3. How to build the theory on a specific system - may be just a brain storm[clue found]
  4. ios7 上 UIActivity 用的image
  5. bbed的使用--安装及初探
  6. 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
  7. 使用Fragment 实现动态UI 和 动态添加Fragment
  8. php文件上传之单文件上传
  9. geotools实现多边形的合并&amp;缓冲区
  10. Android开发学习之路--MAC下Android Studio开发环境搭建
  11. 树莓派.Raspberry Pi 3碰到&quot;Unable to determine hardware version. I see: Hardware : BCM2835&quot;错误的解决过程
  12. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树
  13. 生成N位数字随机数
  14. PHP用post来进行Soap请求
  15. Linux中.rar文件解压
  16. 数据库操作类《SqlHelper》
  17. 线段树-&gt;面积并 Atlantis HDU - 1542
  18. 使用maven构建scala项目
  19. HTML之DocType的几种类型
  20. C语言的基本构成

热门文章

  1. [代码]--ORA-01745: 无效的主机/绑定变量名 ORA-00917: 缺失的逗号 oracle日期格式错误
  2. GNU Emacs命令速查表
  3. 【题解】 [NOI2009]变换序列 (二分图匹配)
  4. bzoj 4631: 踩气球 线段树合并
  5. Installshield 打包安装程序时写入注册表,及运行bat文件
  6. IO编程(3)-序列化
  7. HTTP 返回的状态码 != 200 ,浏览器不会将返回的内容缓存到本地磁盘上
  8. 个推应用统计产品(个数)Android集成实践
  9. node.js原生后台进阶(一)
  10. &lt;meta content=&#39;IE=edge,chrome=1&#39; http-equiv=&#39;X-UA-Compatible&#39; /&gt;