基本思想:二分法的一个前提是序列已经是有序的,然后将待查找值与序列的中点比较。根据比较结果,选择下一步比较的部分。二分查找(binary search)就是一个不断重复这一查找过程,直到找到这个值。

算法复杂度:O(lgn)

算法实现:

一:迭代法

int bin_search_iteration(int arr[],int start,int end,int x)
{while (start<end){int mid = (start + end) / 2;if (arr[mid]<x){start = mid + 1;}else if (arr[mid]==x){return mid;}else{end = mid - 1;}}if (start == end)return arr[start] == x ? start : -1;else{return -1;}}

二:递归法

int  bin_search(int arr[],int start,int end,int x)
{if (start == end)return arr[start]==x?start:-1;int mid = (start+end) / 2;if(arr[mid]==x){return mid;}else if(arr[mid]>x){return bin_search(arr, start,mid, x);}else{return bin_search(arr, mid+1,end, x);}}

转载于:https://www.cnblogs.com/haoliuhust/p/binary_search.html

算法学习笔记(一):二分法及其实现相关推荐

  1. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  2. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  3. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  4. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序

    拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...

  5. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

  6. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  7. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

  8. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  9. l2-004 这是二叉搜索树吗?_算法学习笔记(45): 二叉搜索树

    二叉搜索树(Binary Search Tree, BST)是一种常用的数据结构,在理想情况下,它可以以 的复杂度完成一系列修改和查询,包括: 插入一个数 删除一个数 查询某数的排名(排名定义为比该数 ...

  10. 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列

    (为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...

最新文章

  1. Pinia轻量级状态管理
  2. 【Python】百度翻译的爬虫实现(前篇)
  3. [原创]存储过程里面的递归
  4. Android 学习笔记
  5. Android——应用图标微技巧,系统中应用图标的适配
  6. Datawhale组队-Pandas(下)分类数据(打卡)
  7. 欧姆龙变频器MX2参数_第442期丨【源程序】基于三菱西门子欧姆龙松下PLC实现喷水池控制系统;欧姆龙PLC编程软件更新步骤...
  8. oracle创建一个学生,oracle 创建学生选课视图
  9. c语言malloc返回值,malloc(0)的返回值
  10. 编程语言python入门-2020年10月编程语言:Java、Python 龙争虎斗
  11. mysql练习----SUM and COUNT/zh图(二)
  12. 武汉市房价数据挖掘与可视化分析(Python)
  13. 树莓派:Adafruit的I2C SSD1306 OLED驱动
  14. Linux 如何查看文件夹的大小
  15. 《美国职业橄榄球大联盟》:NFL·王牌四分卫
  16. javaweb项目实训总结_JAVAWEB实训心得体会
  17. 专升本 计算机 公共课学习笔记(持续更新中...)
  18. 红米note8Pro6400万像素爆发,但不会这些拍照技巧,四摄等于摆设
  19. 启动BIOS的虚拟化设置 | 开启CPU虚拟化支持
  20. Java支付宝沙箱环境支付,官方Demo远程调试【内网穿透】

热门文章

  1. Spring学习总结一
  2. Linux chmod命令小贴士
  3. EasyExcel读取文件异常,报 java.lang.NoClassDefFoundError,/x2006/main/CTTableStyles
  4. S5PV210开发 -- 驱动开发相关硬件简介
  5. C语言再学习 -- C 预处理器
  6. Uboot启动过程详解
  7. 【干货】史上最全的Tensorflow学习资源汇总
  8. 重构智能合约(上):非确定性的幽灵
  9. Android Binder 分析——匿名共享内存(Ashmem)
  10. JZOJ 5460. 【NOIP2017提高A组冲刺11.7】士兵训练