【程序员常用十算法】二分查找法—5分钟掌握

liftword2个月前 (03-28)技术文章27

【上期《ChatGPT写的vs我写的——快速排序算法》出来以后,有不少朋友都在感慨未来怎么办啊,是不是初级程序员这些岗位都可以被取代了?我觉得这是一体两面,可以理解为危机(被取代)、也可以理解为机遇(解放生产力),但不论如何这些其实都并不应该影响你持续学习的决策与行动,相反只有在某一领域持续深耕下去,才更有储备去打破一些东西

给我5分钟,讲明白二分查找法——

一、算法原理:

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

假设有如下一本1000页的书,给定一个页码,如何快速地找到它呢?如果一页一页逐步查找,最高是不是可能要999次?但用二分法,就可以把查找的次数降到个位数。

第一步:找到1~1000的中位数,通过索引去找,索引是从0开始的,所以这里就是(0+999)//2=499,对应数值为500。即:

第二步:给定一个想要查找的页码比如365,将365与中位数500进行比较,因365<500,则锁定左区:

第三步:求左区的中位数,方法与第一步相同,求得索引为249,对应数值为250。即:

第四步:将365与250比较,因365>250,则锁定右区:

依次类推,最终找到页码365,找到的意思就是找到页码365对应的索引364,这个例子里数列是1~1000,每次增加1,可能有些同学会感觉这还需要找吗,都可以直接看出来了。

但想象一下,实际碰到的数列不一定是等比或等差,这时候就得有一种算法快速地能定位想找的这个数的位置(即索引),通过直观去看是看不出来的。

二、Python代码实现

看懂了算法的原理介绍,代码就是算法的具现:

这段算法每个语句都加上了注释,应该很容易读懂。这里查找到第9次,就找到了365对应的索引。具体运行结果为:

此外,我们可以察觉到算法的原理实际上是一个递归的过程,因为代码也可以用递归来实现:

运行结果相同,具体为:

【今天就讲到这里,每天进步一点点】

相关文章

Python 算法 01--二分查找

猜数游戏在程序中预设一个 0-9 之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示 “遗憾,太大了”;小于预设的数,显示 “遗憾,太小了”如此循环,直至猜中该数,显示 “预测 N 次,你...

如何用Python实现二分搜索算法

如何用Python实现二分搜索算法二分搜索(Binary Search)是一种高效的查找算法,适用于在有序数组中快速定位目标值。其核心思想是通过不断缩小搜索范围,每次将问题规模减半,时间复杂度为 (O...

Python中如何使用二分法快速查找数据

平时我们会经常找东西,东西少,随便找下就可以找到了,当东西很多很多的时候,找起来就要花大量的时间。假如你平时摆放的东西很整齐、很有规律,那就方便多了,如果你对所有的东西都编号标记,那可能一下就找出来了...

Python 常用算法:排序与查找

在 Python 编程的领域中,算法是解决各类问题的核心步骤与方法。排序和查找算法作为基础且常用的算法类型,在数据处理、搜索应用等诸多场景中发挥着关键作用。接下来,让我们深入了解几种常见的排序算法和查...

喂!这么强悍的五个python内置方法你到现在才说!

要说起python好用的库,那是多到说也说不完,不过很多都是第三方库。他们除了需要安装,其最麻烦的地方就是打包!很多时候,你可能打包不顺畅,就是因为其第三方库引用太多,依赖太多导致的。所以今天我们来隆...