文章目录

  • C++
  • Python

二分查找:

  • 序列必须为有序序列

二分查找的几种变体:

  • 查找 ==
  • 查找第一个 >=
  • 查找第一个 >

C++

Python

def search(li, l, r, x):"""二分查找,查找等于x的index:param li: 数组:param l: 左指针:param r: 右指针:param x: 待查找的值:return: index(找到)或 -1(未找到)"""while l <= r:mid = int((l+r)/2)if li[mid] == x:return midelif li[mid] > x:       # li[mid]左边找r = mid - 1else:l = mid + 1# l>rreturn -1def search_equa_bound(li, l, r, x):"""二分查找,升序序列中查找第一个大于等于x的index:param li: 数组:param l: 左指针:param r: 右指针:param x: 待查找的值:return: index(找到)或 -1(未找到)"""while l < r:mid = int((l + r) / 2)if li[mid] >= x:# li[mid]右边均>=x,则第一个大于等于x的可能在[l, mid]的闭区间r = midelse:l = mid + 1# l==rif li[l] >= x:return lelse:return -1def search_bound(li, l, r, x):"""二分查找,升序序列中查找第一个大于x的index:param li: 数组:param l: 左指针:param r: 右指针:param x: 待查找的值:return: index(找到)或 -1(未找到)"""while l < r:mid = int((l + r) / 2)if li[mid] > x:# li[mid]右边均>x,则第一个大于x的可能在[l, mid]的闭区间r = midelse:l = mid + 1# l==rif li[l] > x:return lelse:return -1li = [10, 20, 30, 40, 50, 60]       # 升序xs = [10, 60, 35]
for x in xs:result = search(li, 0, len(li) - 1, x)print(result)       # [0, 5, -1]xs = [5, 10, 25, 65]
for x in xs:result = search_equa_bound(li, 0, len(li) - 1, x)print(result)       # [0, 0, 2, -1]xs = [5, 10, 25, 65]
for x in xs:result = search_bound(li, 0, len(li) - 1, x)print(result)       # [0, 1, 2, -1]

算法(一):二分查找相关推荐

  1. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  2. 数据结构与算法:二分查找

    二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...

  3. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  4. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  5. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

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

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

  7. 算法总结-二分查找算法

    二分查找也称折半查找(Binary Search),是一种效率较高的查找方法.该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.如果一个序列是无序的或者是链表,那么该序列就不能使用二 ...

  8. 经典算法之二分查找法(俗称基本二分搜索法)

    经典算法之二分查找法(俗称二分搜索法) 文章目录 经典算法之二分查找法(俗称二分搜索法) 前言 一.什么是二分查找法? 二.代码实现 总结 前言 就算法而言,我们主要学习的是数学+思维+逻辑+数据结构 ...

  9. 算法简介——二分查找,时间复杂度,空间复杂度

    文章目录 前言 二分查找 时间复杂度 大O表示法 空间复杂度 小结 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略 ...

  10. leetcode算法之二分查找

    LeetCode算法之二分查找 前言 对于算法一直抱有恐惧感,觉得没有算法我也写了这么多代码,但周遭的环境让我感觉目前身为一名浅薄知识的敲代码的人,是需要去不断的汲取一些知识,所以就像大学学习英语单词 ...

最新文章

  1. Nginx使用教程(五):使用Nginx缓存之缓存静态内容
  2. wmi接口如何通过Win32_Volume类修改盘符
  3. Redis _面试经典
  4. K8S——关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署)
  5. 技术大牛收割机!Java之父James Gosling现在哪里???
  6. Beta冲刺博客集合贴
  7. Linux高级文本处理之sed(三)
  8. 部署项目到jetty
  9. 【数据结构笔记09】二叉树的定义、性质、实现
  10. java 包结构 枚举类_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...
  11. Hive几种导出数据方式
  12. Linux c 多线程写日志,linux c/c++多线程程序的编写(转)
  13. Windows远程桌面实现之十二:桌面屏幕通过ONVIF协议与NVR等监控录像设备对接,以及进一步增强直播功能
  14. Houdini vex用勾股定理推算椭圆运动轨迹
  15. Web 前端本地化(一)
  16. 终极搞定硬盘“A disk read error occured,Press Ctrl+Alt+Del to restart”报错的彻底解决方法...
  17. 它是三大历史文献之一,明明价值连城,却被当做一堆废纸
  18. 海思hi3516dv300 配置uart3
  19. JSONArray转字符串数组
  20. 无需下载 网页版 Matlab

热门文章

  1. Ubuntu上安装ns2-2.34
  2. Maven最佳实践:管理依赖
  3. 分金币 (UVA 11300)
  4. 链路层发现协议LLDP
  5. MySql安装root用户密码设置失败问题解决
  6. Samba和用户组综合练习
  7. 4.json字符串转换集json对象、json对象转换json字符串
  8. linux夸分区软连接的作用,Linux 硬连接和软连接的原理 (in使用)
  9. mysql 分区表 知乎_mysql 分区表
  10. Java—读取多层嵌套Json文件的内容并根据索引返回JsonObject