二分查找,也叫折半查找,是一种适用于顺序存储结构的查找方法。它是一种效率较高的查找方法,时间复杂度为 O(lgn),但它仅能用于有序表中。也就是说,表中的元素需按关键字大小有序排列。
二分查找用左右两个指针来标注查找范围。程序开始时,查找范围是整个线性表,左指针指向第一个元素,右指针指向最后一个元素;每一次循环过后,查找范围都缩小为原先的一半,直到左右指针重叠或者左指针处于右指针的右侧。因为每次缩小一半的范围,所以可以得出二分查找的时间复杂度为 O(lgn)。
我们以图 1 中的有序数组为例进行二分查找。格子中的数是数组的每个位置上存储的数据,格子下方的数是下标。
图 1:有序数组
我们以 31 为关键字,在数组中进行二分查找,来找出关键字出现时的下标。
图 2:初始化二分查找
随后,求出左右指针的平均值 mid=7,如图 3 所示。由于数组有序,mid 指向的元素必定大于等于左指针指向的数,小于等于右指针所指向的数。将 mid 指向的元素与关键字 31 比较,发现 23 小于 31。
图 3:求出 mid
因为 23 小于 31,又因为数组有序,可以得出下标小于等于 7 的数皆小于关键字。此时,把左指针 left 赋值为 mid+1,缩小搜索范围,去掉已知小于关键字的部分,把查找范围缩小到下标 8~15,如图 4 所示。
图 4:移动左指针
类似地,再次求出左右指针的平均值 mid。此时 mid=11,mid 指向的元素为 40。40 大于关键字 31,如图 5 所示。
图 5:求出 mid
因为 mid 指向的元素 40 大于关键字,又因为数组有序,可以得出下标大于等于 11 的元素皆大于关键字。此时,把
文章浏览阅读2.1k次。1 关于矢量数据离线1.1 离线的优点矢量数据离线在大众手机地图产品中已经相对成熟。百度地图、高德地图、图吧等手机地图产品都可以通过下载矢量数据离线包来减少流量。矢量数据离线有以下好处:矢量数据可压缩,相比切片方式,矢量数据通过压缩可以变得很小。比如百度地图整个北京市的离线数据只有16M左右。采用矢量数据,在处理标注时更加灵活。比如手机地图产品支持旋转,这样的情况下对标注需要特殊_arcgis for ios 体验(二) 绘制标绘
文章浏览阅读8.1k次,点赞2次,收藏3次。分页的原理 //初始化一个目标list List<String> arrayList = new ArrayList<>(); for (int i = 0; i <= 231; i++) { arrayList.add(i + ""); } //分割多少,计算一共会有多少页 in..._拆分arraylist
文章浏览阅读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
文章浏览阅读677次。在Python编程中,我们经常需要计算数值的指数函数。指数函数是一种常见的数学函数,它以一个底数为基础,将指数作为幂运算的指数。在本文中,我们将学习如何使用Python编程语言来计算指数函数。操作符,我们可以轻松地计算一个数的任意指数。函数,我们都可以方便地在Python中计算指数函数。这些功能使得我们可以轻松地处理需要指数计算的数学问题。函数接受两个参数,第一个参数是底数,第二个参数是指数。模块,它包含了许多与数学相关的函数和常量。这就是我们计算出的e的2次方的结果。,我们还可以使用Python的。_python 幂指数
文章浏览阅读728次。先说一下应用场合,在LED点阵显示屏中,为了节省flash空间,常用一个bit位来标记哪个灯是否点亮。为了做出比较炫的效果,比如16 * 16像素gif动画边边移动边跳跃。就应用到该思想。双字节是16bit位,数组的bit位是数组长度乘以8(类型指的是uint8_t),比如uint8_t a[5]长度则是5 * 8 = 40。该函数的思想就是这双字节的16bit位在在数组a[5]中40bit位中移..._将数组转比特 c
文章浏览阅读500次。Hadoop概述课程目标:知道Hadoop的概念及发展历史说出hadoop的核心组件知道hadoop的优势1.1 什么是HadoopHadoop名字的由来作者:Doug cuttingHadoop项目作者的孩子给一个棕黄色的大象样子的填充玩具的命名Hadoop的概念:Apache Hadoop 是一个开源的, 可靠的(reliable), 可扩展的(scalable)分布式计算框架允许使用简单的编程模型跨计算机集群分布式处理大型数据集可扩展: 从单个服务器_大数据 hadoop 课程内容
文章浏览阅读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样例
文章浏览阅读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题目截止到当月的最大和累计
文章浏览阅读2.8k次。 1998年,“四通利方与华渊资讯合并建立新浪网”一事被《互联网周刊》评为当年“十大IT新闻”之首。这一年,张朝阳在中国第一次利用风险投资建立搜狐,并成功地将之打造成新兴生活时尚门户;这一年,凭借出售免费邮件系统获得资金的网易也开始参照AOL模式进军门户行列;同样是这一年,曾经叱咤风云的张树新离职,瀛海威开始全面转型……1998年被称为中国互联网元年,新浪网的成立为何会在众多事件中脱颖而出?这_1999年11月,新浪网完成了6000万美元的融资。
文章浏览阅读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
文章浏览阅读4.1k次。在用新版Unity打开旧版本的工程时遇到了这个错误解决:进入PlayerSetting面板取消勾选之后重启Unity_unity compilation failed
文章浏览阅读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注册表一键恢复