二分查找场景

二分搜索用于在一个单调或者局部单调有序数组中查找一个符合某些条件的值,时间复杂度为O(logN)

二分查找原理图解

拿升序数组为例子进行解释,假设我们需要再数组中找到目标值key的下标。

1、首先可以将数组按key所在下标划分为三个部分,左边是小于key的部分,然后中间是key值,右边为大于key的部分。

用left和right两个指针不断地缩小搜索区域。

2、取mid为left和right的中间值,如果mid在key的下标的左边(即nums[mid] < key)就将left移到mid+1的位置。

3、同理。如果mid在key下标的右边(nums[mid] > key),就将right移到mid-1。

直到nums[mid] == key或者left和right相等无法再移动。

如果有nums[mid] == key 则mid为key的下标,如果一直没有满足上述条件,最终left和righ指针相等,则返回-1,说明搜索完整个数组都没有找到key。

二分查找代码实现

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]def bsearch(key):l, r = 0, len(nums)-1 # 左指针和右指针while l < r:mid = l + r >> 1 # 取中值if nums[mid] < key: l = mid + 1 # 如果mid在key下标左边,将l移动到mid+1elif nums[mid] > key: r = mid - 1 # 如果mid在key下标右边,将r移动到mid+1else: return midreturn -1 # 如果列表中没有,则返回-1print(bsearch(5))

二分查找 (二分搜索) 最通俗易懂的图解与实现相关推荐

  1. 二分查找算法+代码(通俗易懂简洁扼要)

    知乎原文出处二分查找算法+代码(通俗易懂简洁扼要) - 知乎 欢迎关注我的知乎账号:进击的steve - 知乎 二分查找是一个可以把单值查找时间复杂度从O(n)降到O(logn)的算法. 二分查找的前 ...

  2. python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例

    文章目录 二分查找 线性查找 插入排序 快速排序 选择排序 冒泡排序 归并排序 堆排序 推荐代码一 推荐代码二 希尔排序 拓扑排序 说明:本篇博文的知识点大部分来自 Python3 实例 二分查找 二 ...

  3. java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...

    本文来讲一种搜索算法,即二分搜索算法,通常在面试时也会被问到. 我们先来看一个例子,在图书馆通常是根据查到的编号去找书,可以在书架上按顺序一本本地查找,也可以找到一本书不符合预期时,再跳过一大部分书再 ...

  4. java二分查找法视频_078-二分查找算法思路图解

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  5. list 查找_趣味图解算法之二分查找

    大多数程序员在看到"算法"两字的时候,是不是头大如斗.但如果想去大公司发展,在面试时又绕不过算法这座大山.市面上好多讲解算法的书籍(如算法导论)基本上都太学术.太复杂,对初学者很不 ...

  6. 【数据结构与算法】一篇文章彻底搞懂二分查找(思路图解+代码优化)两种实现方式,递归与非递归

    1.二分查找是什么? 二分查找也称折半查找,是一种效率较高的查找方式.但是,二分查找要求线性表为顺序存储结构且表按关键字有序排列. 时间复杂度:O(log2n) 2.二分查找的思路分析 便于叙述,笔者 ...

  7. js实现二分查找(二分搜索)

    首先了解什么是数据结构和算法 数据结构 = 数据结构 + 算法 数据结构:用来存储数据的数组 算法:暴力搜索,二分搜索 二分搜索:是一个搜索某个值的索引的算法 条件:在一个有序的数组中查找一个特定的元 ...

  8. 关于二分查找和二分搜索

    首先是二分查找,举个有序的整数数组例子(二分查找和搜索都是针对有序数组) public int rank(int key, int n) {int lo = 0, hi = n - 1;while ( ...

  9. 再也不怕女朋友问我二分查找了!【手绘漫画】图解二分查找(修订版)(LeetCode 704题)

    文章目录 图解算法与数据结构 1.前言 2.代码 3.实例(LeetCode 704题) 图解算法与数据结构 1.前言 上次讲到的更的二分查找模板在很多地方让我使用起来不是特别的舒服,感谢B站上的y大 ...

最新文章

  1. Mybatis中的attempted to return null from a method with a primitive return type (int).异常
  2. tomcat自动运行磁盘任意位置上的项目、使用Maven对tomcat进行自动部署
  3. html 垂直线代码,html – Bootstrap 3水平和垂直分隔线
  4. 关于css 的AST 语法树的理解
  5. opencv:图像的基本变换
  6. 线程自动退出_C++基础 多线程笔记(一)
  7. oracle的基本概念,oracle的基本概念
  8. 使用 Swagger 2 构建 RESTful APIs
  9. python逻辑表达式是什么_如何在Python中处理逻辑表达式?
  10. 贝叶斯方法学习笔记(一)
  11. javascript时间戳转换成yyyy-MM-DD格式
  12. Oozie安装ExtJs教程
  13. 分页显示java_java分页实现 怎样用java实现分页显示?
  14. 浅谈交换机和路由器的区别
  15. react-redux多reducer完整实例
  16. 贵州大数据声势已起 如何引进人才?
  17. 全集然文明nbsp;(请点击图标进…
  18. 深耕硬科技,香港科大百万创赛与八大投资机构签署合作意向
  19. maven 国内源配置
  20. 常见的java面试题

热门文章

  1. AI虚拟主播软件系统 搭建24小时不间断运营的数字人直播间的操作教程分享
  2. C语言程序设计:汉诺塔
  3. 从Tlink看企业接入物联网的紧迫性
  4. ArcGIS10.8破解安装包下载安装教程
  5. GDC - 《幽灵行动:荒野》地形技术和工具(四)
  6. 多重if选择结构和switch选择结构的区别和适用场合是什么?
  7. springboot修改启动logo,banner佛祖,人物,动漫
  8. aes128算法c语言实现,AES128 C语言实现
  9. 以太坊-挣脱数字货币的枷锁
  10. 苹果在线服务大范围的宕机,现已化解