二分算法是什么

二分搜索是一种时间复杂为log2nlog_2nlog2​n的算法,可以用于单调函数求根和单调序列查询的有效算法,即使在数列长度在很大的情况下也能很快对其查询,在此同时二分算法也是一种思维方式,在很多解题过程中可以更好的优化代码等等

二分算法的原理

每次拿目标数值(以下用key表示)与数组中间位置的数据(以下用a[mid]表示,mid表示数组中间位置索引值)进行比较,如果key大于a[mid],继续将key与大于a[mid]部分的中间位置的值进行比较;如果key小于a[mid],继续将key与小于a[mid]部分的中间位置值进行比较。

注:对于无序数组,若先进行排序,再使用二分查找,这种方法虽然可以实现查找,但是会改变最原始数组的元素位置,所以针对无序数组,最好用基本的查找算法实现

二分代码实现

一、朴素实现

int search(int l,int r,int key) {int mid = l + r >> 1;while(a[mid] != key) {if(a[mid] > key) {r = mid - 1;}else {l = mid + 1;}if(l > r) return -1; //没找到mid = l + r >> 1;}return mid;
}

二、通用实现

int search(int k) {int l = -1,r = n;//注意的是数组是从0开始的while(l + 1 < r) {int mid = l + r >> 1;if(a[mid] <= k)l = mid;else r = mid;}return r;//返回的是大于k的第一个位置
}

附上练习题

http://acm.mangata.ltd/training/61d2be109583df9f1d5e6d9c

人均8题及以上

视频链接:https://www.bilibili.com/video/BV1T44y1q7nL

2021年SWPUACM暑假集训day1二分算法相关推荐

  1. 2021年SWPUACM暑假集训day3最小生成树算法

    前言 视频链接 视频连接:https://www.bilibili.com/video/BV1wV411s7Pe 练习题单 SWPUOJ题单:http://acm.mangata.ltd/traini ...

  2. 2021年SWPUACM暑假集训day4KMP算法

    什么是KMP算法 KMP算法(也叫看猫片算法(bushi)是Knuth.Pratt 和 Morris 在 1977 年共同发布一个在线性时间(O(n+m))字符串查找或匹配算法,常用于在一个文本串 S ...

  3. 2021年SWPUACM暑假集训day2并查集算法

    什么是并查集 并查集是一种树形的数据结构,顾名思义,它用于处理一些不交集的 合并 及 查询 问题. 它支持两种操作: 1.查找(find):确定某个元素处于哪个子集 2.合并(merge):将两个子集 ...

  4. 2021年SWPUACM暑假集训day5单调栈算法

    什么是单调栈 顾名思义,单调栈即满足单调性的栈结构.这里的单调递增或递减是指的从栈顶到栈底单调递增或递减.既然是栈,就满足后进先出的特点.与之相对应的是单调队列. 单调栈的实现 插入 在当前元素插入栈 ...

  5. 【总结】2019.8.19南海中学暑假集训Day1

    今天是来南中集训的第一天,虽然以往都来集训过几次,可这次不太一样,这次是以一名新高一同学的身份正式加入到南中信息学的队伍中,和各位大佬一起学习,挺好! 又是一个人住一间宿舍,大晚上的外面有只青蛙在不停 ...

  6. 【Nowcoder】2021牛客暑假集训营(第七场): xay loves trees 双指针 + 线段树 + 尺取

    传送门 题意 给你两个树,求一个最大集合,要求集合内的任意两个点在第一个树上,比如是祖先关系,在第二棵树,不能存在祖先关系 分析 某人吐槽我的题解写的太简单了,然后我觉得...承认错误死不悔改 这道题 ...

  7. 2021-07-19 暑假集训Day1

    Result:191/1371 AC:5/12 Dir: xf从后往前开,yh从前往后开,我从中间乱开(),第一个随便看了个G(lol那题),感觉没有k的限制是个水题,有k的限制想了5分钟妹想出来,换 ...

  8. 2018暑假集训Day1

    这几天的训练对我来说真是前所未有的高强度. 然后,几乎都是垫底吧.(被列入危险名单 觉得今年的普及一等很悬,很悬.. 今天值得写写blog的T2:(其实对大部分人来说很水 一天狼需要从二维平面上的(0 ...

  9. 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)

    系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...

最新文章

  1. $(function(){})、$(document).ready(function(){})....../ ready和onload的区别
  2. 【C++】多线程互斥锁、条件变量
  3. Hibernate5-唯一查询和聚合查询
  4. 论述类文本知识框架_考前知识梳理与答题技巧之论述类文本
  5. Indetifier
  6. SAP Commerce Cloud Accelerator Checkout Delivery Mode 选择页面的实现 JSP
  7. c# 常用数据库封装
  8. 使用Navicat for MySQL设置定时备份数据库和数据恢复
  9. Python二级题库答案纠正
  10. CenterOs底下安装redis
  11. 闪迪u盘量产工具U盘正常显示但是多出几个空分区的解决方案
  12. 你居然只知道蓝绿发布?今天教你全链路灰度~
  13. 移动、电信光猫超级管理员密码
  14. Git分布式版本控制遇到的问题如何把本地的项目上传到码市上
  15. ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
  16. 邵东一中2021年高考成绩查询,湖南邵阳2020高考成绩,邵东一中势头强劲,包揽邵阳市文理状元...
  17. 科大讯飞2020脑PET图像分析和疾病预测---单模型进决赛前五
  18. 开源WebGIS开发——如何创建一张地图
  19. 高效流量变现平台——穿山甲
  20. 编程范式(斯坦福大学)学习笔记《四》

热门文章

  1. anaconda 创建,激活,退出,删除环境
  2. vim的几个常用操作
  3. c# 不同窗体之间传值和调用
  4. SuperSocketClientEngine
  5. 没关系,因为你是好人呀
  6. canvas beginPath()的初步理解
  7. 一条命令关掉centos所有不必要的服务和端口号
  8. match VS match_phrase
  9. Uber柳甄:Uber中国独立核算 谋求国内A股上市
  10. python3 _笨方法学Python_日记_DAY4