ACM二分搜索算法
二分搜索算法就是把要搜索的数据在搜索文本中根据情况进行折半,比如要在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月21日 Reference Data Type 数据类型,算法基础说明,二分搜索算法。(课程内容)
Reference Datat Types 引用参考数据类型 -> 组合数据类型 Array, Hash和程序员自定义的复合资料类型 组合数据的修改: 组合数据类型的变量,不是直接存值,而是存一 ...
- .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫
.net mvc前台如何接收和解析后台的字典类型的数据 很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...
- 【437】Binary search algorithm,二分搜索算法
Complexity: O(log(n)) Ref: Binary search algorithm or 二分搜索算法 Ref: C 版本 while 循环 C Language scripts b ...
- 算法(Java实现)—— 二分搜索算法
二分搜索算法 有序数列才可用二分查找算法 思路分析 思路分析 首先确定该数组的中间下标mid = (left + right)/ 2 然后让需要查找的数findVal和arr[mid]比较 findV ...
- [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环
01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...
- hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )
题目1 : 二分·二分答案 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回和上上回里我们知道Nettle在玩<艦これ>,Nettle在整理好舰队之后 ...
- C++实现递归版二分搜索算法
无聊撸了一个,没啥技术含量,别吐槽.. #include <iostream> using namespace std; int BinarySearch(int* nums,int ke ...
- ACM二分查找模板
int main(){ == key int m; while ( l <= r ) { m = ( l + r ) >> 1; if ( x[m] == key ) return ...
- acm算法模板(5)
STL 中 sort 函数用法简介 做 ACM 题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的 O(n^2) 排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错. ST ...
随机推荐
- 153. Find Minimum in Rotated Sorted Array(leetcode, binary search)
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/ leetcode 的题目,binary ...
- Dijkstra单源最短路径,POJ(2387)
题目链接:http://poj.org/problem?id=2387 Dijkstra算法: //求某一点(源点)到另一点的最短路,算法其实也和源点到所有点的时间复杂度一样,O(n^2); 图G(V ...
- ImportError: No module named images
[问题] 在使用学习wxPython时,一个Dem抱有如题所示错误 [解决] images 只不过是wxpython自带demo中的一个文件 体验wxpython IN action的时候Import ...
- maven简单了解,没有Maven和使用Maven的区别
Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期.Maven让开发人员的工作更轻松,同时创建报表,检查,构建和 ...
- 【洛谷P1525】[NOIP2010]关押罪犯
关押罪犯 题目链接 思路: 二分图或并查集 这里讲并查集算法: 1.将每对罪犯的冲突关系按影响从大到小排序 2.将集合与(i+n)合并表示编号为i的罪犯不能在该集合内 3.依次从大到小处理冲突关系: ...
- CDH4.5.0下安装snappy
编译源代码 http://www.cnblogs.com/chengxin1982/p/3862289.html 测试参考 http://blog.jeoygin.org/2012/03/java-c ...
- Eclipse 修改默认工作空间
第一次启动Eclipse时会弹出对话框,让你进行Workspace Launcher,也就是设置Eclipse的项目存放路径.但是,当你勾选“Use this as the default and d ...
- TCP心跳的意义
摘自:https://blog.csdn.net/bjrxyz/article/details/71076442 TCP新手误区–心跳的意义 背景 最近面试了很多的学生,发现很多TCP的新手对于TCP ...
- thinkphp 跳转外网代码(php通用)
thinkphp 提供了一个重定向但是在跳转外部网站的时候就会比较麻烦 下面一种方法还不错, < ?php //重定向浏览器 header("Location: http://www. ...
- 日期格式兼容iOS
iOS不支持2016-02-11 12:21:12格式的日期 目前Safari可以支持的标准格式: MM-dd-yyyy yyyy/MM/dd MM/dd/yyyy MMMM dd, yyyy MMM ...