二分搜索算法就是把要搜索的数据在搜索文本中根据情况进行折半,比如要在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. Educational Codeforces Round 14 - F (codeforces 691F)

    题目链接:http://codeforces.com/problemset/problem/691/F 题目大意:给定n个数,再给m个询问,每个询问给一个p,求n个数中有多少对数的乘积≥p 数据范围: ...

  2. SAP UI5和CRM WebUI的View和Controller是如何绑定的

    UI5 例如我在UI5的界面上画一个按钮,点击之后弹出一个Alert dialog. 在XML view里只定义了controller的名称和事件处理函数的名称.那么按钮被点击之后,controlle ...

  3. 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity

    代码的环复杂度(Cyclomatic complexity,有的地方又翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出. 在软件测试的概念里, ...

  4. C++STL之vector向量容器

    vector向量容器   vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...

  5. java设计模式——外观模式(门面模式)

    一. 定义与类型 定义:门面模式,提供一个统一的接口,用来访问子系统中的一群接口,门面模式定义了一个高层接口,让子系统更容易使用 类型:结构性 二. 使用场景 子系统越来越复杂,增加外观模式提供简单调 ...

  6. caffe中各种cblas的函数使用总结

    转来的,来自:http://www.cnblogs.com/huashiyiqike/p/3886670.html 总结的很赞,转到这里,留一下笔记.感觉cblas的函数名字很好记的,试着去找过源代码 ...

  7. SpringBoot学习13:springboot异常处理方式3(使用@ControllerAdvice+@ExceptionHandle注解)

    问题:使用@ExceptionHandle注解需要在每一个controller代码里面都添加异常处理,会咋成代码冗余 解决方法:新建一个全局异常处理类,添加@ControllerAdvice注解即可 ...

  8. Hibernate 提供session的工具类HibernateUtils

    package cn.itcast.utils; import java.sql.Connection; import java.sql.SQLException; import org.hibern ...

  9. Webpack4 学习笔记四 暴露全局变量、externals

    前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack 暴露全局变量 通过 expose-loader 内联配置 在 webpack中配置 每个模块通过注入的方式 通过CD ...

  10. Python 初始—(项目 目录结构)

    在os 包下,给出 import os ,os.path.abspath(__file__)获取当前文件的相对路径,os.path.dirname 获取当前文件所在的文件夹目录 print(os.pa ...