
【LeetCode】二分法查找(Python版)
发布日期:2021-05-08 05:47:54
浏览次数:17
分类:精选文章
本文共 1451 字,大约阅读时间需要 4 分钟。
一、二分法查找
在有序数列中查找特定数字,顺序查找无疑效率极低。直接从数列中间开始,比较目标数字与中间值。如果中间值小于目标数字,说明目标数字位于后半段;反之,则位于前半段。这一过程不断缩小查找范围,直至找到目标数字或确定其不存在。
二、输出结果
通过上述方法,可以快速定位数列中的特定数字。下图展示了二分查找的基本原理。
三、代码实现
以下是实现二分查找的代码示例:
import randomimport timedef randomList(n): iList = [] for i in range(n): iList.append(random.randrange(0, 1000)) return iListdef quicksort(iList): if len(iList) <= 1: return iList left = [] right = [] for i in iList[1:]: if i <= iList[0]: left.append(i) else: right.append(i) return quicksort(left) + [iList[0]] + quicksort(right)def sequentialSearch(iList, key): ilen = len(iList) for i in range(ilen): if iList[i] == key: return i return -1def binarySearch(iList, key): ilen = len(iList) right = ilen - 1 left = 0 while left <= right: mid = (left + right) // 2 if key > iList[mid]: left = mid + 1 elif key < iList[mid]: right = mid - 1 else: return mid return -1if __name__ == "__main__": iList = quicksort(randomList(20)) keys = [random.choice(iList), random.randrange(min(iList), max(iList))] for key in keys: num = binarySearch(iList, key) if num != -1: print("%d found at position %d" % (key, num)) else: print("%d not found in list" % key)
上述代码实现了二分查找和顺序查找两种方法。通过实验可以发现,二分查找的效率远高于顺序查找。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月27日 10时38分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2019-03-06
SQL注入
2019-03-06
#2036:改革春风吹满地
2019-03-06
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2019-03-06
P1379 八数码难题 ( A* 算法 与 IDA_star 算法)
2019-03-06
算法学习笔记: 珂朵莉树
2019-03-06
Codeforces Round #664 题解(A ~ C)
2019-03-06
Problem A - Sequence with Digits (数学推导)
2019-03-06
Problem 330A - Cakeminator (思维)
2019-03-06
LeetCode75 颜色分类 (三路快排C++实现与应用)
2019-03-06
docker基础:容器生命周期管理命令
2019-03-06
C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树
2019-03-06
C# 规范建议
2019-03-06
C语言+easyX图形库的推箱子实现
2019-03-06
反汇编-流程控制语句-2-循环控制语句分析
2019-03-06
调试vs2019代码的流程
2019-03-06
游戏外挂基础-概述
2019-03-06
脱壳与加壳-加壳-6-代码实现加密导入表
2019-03-06
Typora配置PicGo时,提示Failed to fetch
2019-03-06
ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL
2019-03-06