【Python算法系列十】二分查找算法_python二分查找算法-程序员宅基地

技术标签: 算法  python  

二分查找,也叫折半查找,是一种适用于顺序存储结构的查找方法。它是一种效率较高的查找方法,时间复杂度为 O(lgn),但它仅能用于有序表中。也就是说,表中的元素需按关键字大小有序排列。

二分查找用左右两个指针来标注查找范围。程序开始时,查找范围是整个线性表,左指针指向第一个元素,右指针指向最后一个元素;每一次循环过后,查找范围都缩小为原先的一半,直到左右指针重叠或者左指针处于右指针的右侧。因为每次缩小一半的范围,所以可以得出二分查找的时间复杂度为 O(lgn)。

我们以图 1 中的有序数组为例进行二分查找。格子中的数是数组的每个位置上存储的数据,格子下方的数是下标。
1
图 1:有序数组

我们以 31 为关键字,在数组中进行二分查找,来找出关键字出现时的下标。

  1. 首先,如图 2 所示,初始化左右指针。左指针存储着第一个元素的下标,右指针存储着最后一个元素的下标。此时查找的范围是整个数组。

在这里插入图片描述
图 2:初始化二分查找

  1. 随后,求出左右指针的平均值 mid=7,如图 3 所示。由于数组有序,mid 指向的元素必定大于等于左指针指向的数,小于等于右指针所指向的数。将 mid 指向的元素与关键字 31 比较,发现 23 小于 31。
    在这里插入图片描述
    图 3:求出 mid

  2. 因为 23 小于 31,又因为数组有序,可以得出下标小于等于 7 的数皆小于关键字。此时,把左指针 left 赋值为 mid+1,缩小搜索范围,去掉已知小于关键字的部分,把查找范围缩小到下标 8~15,如图 4 所示。
    在这里插入图片描述
    图 4:移动左指针

  3. 类似地,再次求出左右指针的平均值 mid。此时 mid=11,mid 指向的元素为 40。40 大于关键字 31,如图 5 所示。
    在这里插入图片描述
    图 5:求出 mid

  4. 因为 mid 指向的元素 40 大于关键字,又因为数组有序,可以得出下标大于等于 11 的元素皆大于关键字。此时,把

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_70372647/article/details/124936085

智能推荐

ARCGIS RUNTIME FOR IOS总结(五)_arcgis for ios 体验(二) 绘制标绘-程序员宅基地

文章浏览阅读2.1k次。1 关于矢量数据离线1.1 离线的优点矢量数据离线在大众手机地图产品中已经相对成熟。百度地图、高德地图、图吧等手机地图产品都可以通过下载矢量数据离线包来减少流量。矢量数据离线有以下好处:矢量数据可压缩,相比切片方式,矢量数据通过压缩可以变得很小。比如百度地图整个北京市的离线数据只有16M左右。采用矢量数据,在处理标注时更加灵活。比如手机地图产品支持旋转,这样的情况下对标注需要特殊_arcgis for ios 体验(二) 绘制标绘

ArrayList 分隔List集合,按指定大小,将集合分成多个_拆分arraylist-程序员宅基地

文章浏览阅读8.1k次,点赞2次,收藏3次。分页的原理 //初始化一个目标list List<String> arrayList = new ArrayList<>(); for (int i = 0; i <= 231; i++) { arrayList.add(i + ""); } //分割多少,计算一共会有多少页 in..._拆分arraylist

html5 %3cdiv%3e,HTML URL Encoding Reference | HTML Reference, HTML5 Reference | TechbrooD.com-程序员宅基地

文章浏览阅读2w次。HTML URL Encoding ReferenceURL encoding converts characters into a format that can betransmitted over the Internet.URL - Uniform Resource LocatorWeb browsers request pages from web servers by using a ..._%c3%a5%c2%bc%c2%a0%c3%a4%c2%ba%c2%ae

Python指数函数:使用幂运算计算指数_python 幂指数-程序员宅基地

文章浏览阅读677次。在Python编程中,我们经常需要计算数值的指数函数。指数函数是一种常见的数学函数,它以一个底数为基础,将指数作为幂运算的指数。在本文中,我们将学习如何使用Python编程语言来计算指数函数。操作符,我们可以轻松地计算一个数的任意指数。函数,我们都可以方便地在Python中计算指数函数。这些功能使得我们可以轻松地处理需要指数计算的数学问题。函数接受两个参数,第一个参数是底数,第二个参数是指数。模块,它包含了许多与数学相关的函数和常量。这就是我们计算出的e的2次方的结果。,我们还可以使用Python的。_python 幂指数

字节转换比特位c语言,C语言实现双字节在数组中按比特位移动-程序员宅基地

文章浏览阅读728次。先说一下应用场合,在LED点阵显示屏中,为了节省flash空间,常用一个bit位来标记哪个灯是否点亮。为了做出比较炫的效果,比如16 * 16像素gif动画边边移动边跳跃。就应用到该思想。双字节是16bit位,数组的bit位是数组长度乘以8(类型指的是uint8_t),比如uint8_t a[5]长度则是5 * 8 = 40。该函数的思想就是这双字节的16bit位在在数组a[5]中40bit位中移..._将数组转比特 c

大数据基础课第一课 Hadoop详解_大数据 hadoop 课程内容-程序员宅基地

文章浏览阅读500次。Hadoop概述课程目标:知道Hadoop的概念及发展历史说出hadoop的核心组件知道hadoop的优势1.1 什么是HadoopHadoop名字的由来作者:Doug cuttingHadoop项目作者的孩子给一个棕黄色的大象样子的填充玩具的命名Hadoop的概念:Apache Hadoop 是一个开源的, 可靠的(reliable), 可扩展的(scalable)分布式计算框架允许使用简单的编程模型跨计算机集群分布式处理大型数据集可扩展: 从单个服务器_大数据 hadoop 课程内容

随便推点

C# ListView简单示例_c#listview样例-程序员宅基地

文章浏览阅读3.8k次,点赞7次,收藏47次。ListView是用于显示数据的,先在窗体中拉一个lisview控件,还有一些新增、修改、删除、查询按钮和文本框,控件名称为listview,按钮为btnInsert,btnUpate,btnDeleteOne,btnDelete,btnSelect,文本框的名称为txtName,txtSex,txtPhone,txtAddress,设计如下图所示:把listview的View改为Details,添加几项:具体代码using System;using System.Collections.Gene_c#listview样例

hive 编写sql实现每个用户截止到每月为止的最大单月访问次数和累 计到该月的总访问次数_sql题目截止到当月的最大和累计-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏11次。1.1 编写sql实现每个用户截止到每月为止的最大单月访问次数和累 计到该月的总访问次数userid,month,visitsA,2015-01,5A,2015-01,15B,2015-01,5A,2015-01,8B,2015-01,25A,2015-01,5A,2015-02,4A,2015-02,6B,2015-02,10B,2015-02,5A,2015-03,16..._sql题目截止到当月的最大和累计

新浪十年路 新浪的触角 新浪成年_1999年11月,新浪网完成了6000万美元的融资。-程序员宅基地

文章浏览阅读2.8k次。   1998年,“四通利方与华渊资讯合并建立新浪网”一事被《互联网周刊》评为当年“十大IT新闻”之首。这一年,张朝阳在中国第一次利用风险投资建立搜狐,并成功地将之打造成新兴生活时尚门户;这一年,凭借出售免费邮件系统获得资金的网易也开始参照AOL模式进军门户行列;同样是这一年,曾经叱咤风云的张树新离职,瀛海威开始全面转型……1998年被称为中国互联网元年,新浪网的成立为何会在众多事件中脱颖而出?这_1999年11月,新浪网完成了6000万美元的融资。

oracle19crpm安装教程,CentOS8 安装Oracle19c RPM的办法-程序员宅基地

文章浏览阅读255次。1. 下载相应的rpm包 我这边使用的主要有:-rw-r--r-- 1 root root 19112 Apr 5 15:13 compat-libcap1-1.10-7.el7.x86_64.rpm-rw-r--r-- 1 root root 195388 Apr 5 15:15 compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm-rw-..._centos8 compat-libstdc++-33-3.2.3

Unity Deterministic compilation failed_unity compilation failed-程序员宅基地

文章浏览阅读4.1k次。在用新版Unity打开旧版本的工程时遇到了这个错误解决:进入PlayerSetting面板取消勾选之后重启Unity_unity compilation failed

手动修复excel注册表_如何在Excel中手动仅计算活动工作表-程序员宅基地

文章浏览阅读879次。手动修复excel注册表If you have large workbooks with a lot of formulas on the worksheets, recalculating the workbooks can take a long time. By default, Excel automatically recalculates all open workbooks as y..._excel注册表一键恢复

推荐文章

热门文章

相关标签