网站首页 > java教程 正文
【上期《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对应的索引。具体运行结果为:
此外,我们可以察觉到算法的原理实际上是一个递归的过程,因为代码也可以用递归来实现:
运行结果相同,具体为:
【今天就讲到这里,每天进步一点点】
猜你喜欢
- 2025-09-13 面试中如果这样写二分查找_面试分怎么查
- 2025-09-13 图解算法:二分查找树_二分查找法判定树
- 2025-09-13 java中Arrays类中,binarySearch()方法的返回值问题
- 2025-09-13 单片机上实现二分查找+线性插值计算
- 2025-09-13 数据结构之二分查找:c++版本_二分查找算法c语言递归
- 2025-09-13 玩蛇(Python) - 算法:二分查找(Binary Search)
- 2025-09-13 高级Java面试之二分法查找_java二分查找算法代码
- 2025-09-13 秒懂如何运用二分查找算法_二分查找算法是什么意思
- 2025-09-13 看动图学算法(二):二分查找算法的原理和Java讲解
- 2025-09-13 发现了二分查找的秘密_二分查找细节
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)