二分搜索算法就是把要搜索的数据在搜索文本中根据情况进行折半,比如要在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

ACM二分搜索算法的更多相关文章

  1. 1月21日 Reference Data Type 数据类型,算法基础说明,二分搜索算法。(课程内容)

    Reference Datat Types 引用参考数据类型 -> 组合数据类型 Array, Hash和程序员自定义的复合资料类型 组合数据的修改: 组合数据类型的变量,不是直接存值,而是存一 ...

  2. .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫

    .net mvc前台如何接收和解析后台的字典类型的数据   很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...

  3. 【437】Binary search algorithm,二分搜索算法

    Complexity: O(log(n)) Ref: Binary search algorithm or 二分搜索算法 Ref: C 版本 while 循环 C Language scripts b ...

  4. 算法(Java实现)—— 二分搜索算法

    二分搜索算法 有序数列才可用二分查找算法 思路分析 思路分析 首先确定该数组的中间下标mid = (left + right)/ 2 然后让需要查找的数findVal和arr[mid]比较 findV ...

  5. [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环

    01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...

  6. hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )

    题目1 : 二分·二分答案 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回和上上回里我们知道Nettle在玩<艦これ>,Nettle在整理好舰队之后 ...

  7. C++实现递归版二分搜索算法

    无聊撸了一个,没啥技术含量,别吐槽.. #include <iostream> using namespace std; int BinarySearch(int* nums,int ke ...

  8. ACM二分查找模板

    int main(){ == key int m; while ( l <= r ) { m = ( l + r ) >> 1; if ( x[m] == key ) return ...

  9. acm算法模板(5)

    STL 中 sort 函数用法简介 做 ACM 题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的 O(n^2) 排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错. ST ...

随机推荐

  1. MVC中某个页面不需要引用母版页的正确写法

    有些页面想使用单独的样式不想用母版页的时候,可以在开始声明下,就可以不用母版页的CSS和JS引用了语法如下: @{Layout = "";} . 非常之简单

  2. 2019.03.15 ZJOI2019模拟赛 解题报告

    得分: \(20+45+15=80\)(三题暴力全写挂...) \(T1\):Lyk Love painting 首先,不难想到二分答案然后\(DP\)验证. 设当前需验证的答案为\(x\),则一个暴 ...

  3. 20145238-荆玉茗《Java程序设计》课程总结

    每周读书笔记链接汇总 第一周读书笔记: 第二周读书笔记: 第三周读书笔记: 第四周读书笔记: 第五周读书笔记: 第六周读书笔记: 第七周读书笔记: 第八周读书笔记: 第九周读书笔记: 实验报告链接汇总 ...

  4. C&C++

    编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置.当用户按下键盘上的“Enter”键时,数据输入结束.程序自动对所有的整数进行求和并打印出结果 ...

  5. (jdbc和cmd)sqlite数据迁入mysql(导入导出)

    从sqlite进行导出数据 进行cmd命令 第一步:sqlite3->.open [文件路径](打开连接)->.tables(这个是查看表是否有没有)->.cd [切换的盘符](这里 ...

  6. Layer弹出层关闭后刷新父页面

    API地址:http://layer.layui.com/api.html#end 调用END回调方法: end - 层销毁后触发的回调 类型:Function,默认:null 无论是确认还是取消,只 ...

  7. 阅读detection

    关于detecion的几篇文章,感觉有必要系统学习一下,并记录一下了,最近看书比较多,文章看得少,赶紧看看吧. FPN:Feature Pyramid Networks for Object Dete ...

  8. 2、SpringBoot+MybatisPlus整合-------BaseCRUD

    开发工具:STS 代码下载链接:GitHub管理代码 版本: Springboot:1.5.14.RELEASE 使用2.0以上的Springboot,会报出一些异常.欢迎知道异常原因的大牛解惑. M ...

  9. ABAP 调用远程rfc

    ABAP 调用rfc DESTINATION附加项后面接的是远程目标名称,该目标在事务SM59中设定,其中包含连接和登录远程系统所需的全部参数信息.如果调用的就是本机的RFC目标,则DESTINATI ...

  10. glibc2.12升级至2.15

    1.操作系统版本 [root@localhost ~]# cat /etc/redhat-release #CentOS release 6.9 (Final) 2.当前glibc版本 [root@l ...