二分搜索算法就是把要搜索的数据在搜索文本中根据情况进行折半,比如要在2 6 4 9 3 8 7 3 5中找到找到4的位置,那么可以考虑先把数据进行排序,然后把拍好后的数据的中间的那个数据和要查找的数据4进行比较,如果中间的数据比4大,那么4肯定在左半边(即最小数据到中间数据这边),既然这样,那又在这左半边数据中进行同样的操作不就可以找到4咯;听起来就是递归的样子。

用上面的例子演示一下数据是:2 6 4 9 1 8 7 3 5;要查找的数据是4。先进行排序:1 2 3 4 5 6 7 8 9;中间的数据就是5;4<5;所以就在左半边(即:1 2 3 4)查找;然后左半边的中间值就是:2,2<4;所以就在右半边(即使是:3 4)查找;右半边的中间值是:3,3<4;所以又在右半边(4)查找;4==4;就找到了;

Tips:我们先把数据存到数组里面,然后用快排对数组进行排序;这个中间值的确定是这样子的:mdi=(low+hight)/2,low和hight都是指数组的下标;

下面贴代码:

我的:

#include <iostream>
#include <algorithm>
using namespace std; int main()
{
int n,key,mid;
cin>>n;
int *s=new int [n];
for(int i=;i<n;i++)
{ cin>>s[i]; }
int low=,height=n;
cin>>key;
sort(s,s+n);
while(low<=height)
{
mid=(low+height)/;
if(key<s[mid]) height=mid-;
else if(key>s[mid]) low=mid+;
else break;
}
cout<<"key在数组中的下标是:"<<mid<<endl;
return ;
}

然后听大神说还有个5行就搞定的二分搜索法,于是就check了一下:

代码:

//二分查找:
#include <iostream>
#include <algorithm>
using namespace std; int binSearch(int* a, int begin, int end, int k) //a是数组,begin是数组的开始下标,end是数组的结束下标
{
int mid = begin + ( (end - begin)>> );
int index;
index = a[mid] < k && begin + < end ? binSearch(a,mid+,end,k) :
( a[mid] > k && begin + < end ? binSearch(a,begin,mid,k) :
mid * (a[mid] == k) + (a[mid] != k)*(-));
return index;
}
int main()
{
int t;
cin>>t;
int*s=new int[t];
for(int i=;i<t;i++)
{
cin>>s[i];
}
sort(s,s+t);
int key;
cin>>key;
cout<<binSearch(s,,t-,key)<<endl;
return ; }

Sample:

6(数据的数量)

1 6 9 7 2 3(数据)

3(要查找的数据)

Sample Output:

2

5行二分搜索的链接:http://www.cnblogs.com/zhengyuhong/p/3660757.html

最新文章

  1. 回忆:#define的用法
  2. 安装 whmcs
  3. 达洛克战记3 即将开服! What&#39;s New!
  4. java cglib动态代理原理及样例
  5. Ajax学习之小结
  6. 关于WCF在IIS8注册的问题
  7. DiskGenius(磁盘分区/数据恢复) 32位 V4.9.1 免费绿色版
  8. python爬虫之爬取百度图片
  9. bzoj4476 [Jsoi2015]送礼物
  10. hexdump
  11. 洛谷P3258 松鼠的新家
  12. JedisCluster简单使用
  13. 3 第一个Django应用 第2部分(管理站点)
  14. iframe+form上传文件
  15. 2-2 R语言基础 向量
  16. BZOJ2944 : [Poi2000]代码
  17. Ice框架简介及Vs2013安装Ice 3.7.0步骤及实例
  18. [Python 网络编程] TCP、简单socket模拟ssh (一)
  19. CentOS 7运维管理笔记(10)----MySQL源码安装
  20. EMQ -- 用户密码认证

热门文章

  1. Arduino-舵机控制Servo
  2. Uva 11582 巨大的斐波那契数 模运算
  3. MySQL 主从同步 Slave_IO_Running: No
  4. Java 文件切割工具类
  5. Linux---who命令学习
  6. extjs3EmptyText 上传自动清空的问题
  7. C# for语句
  8. C#使用ref和out传递数组
  9. 4.vue引入axios同源跨域
  10. 一篇RxJava友好的文章(一)