网站首页 > 技术文章 正文
简介:二分查找法,也叫折半查找法。是计算机中最基本、最有用的基础算法之一。它讲述的是在有序的集合中搜索特定目标的过程。
实现方法:首先将序列进行排序,将中间位置的值与目标值进行比较,如果相等,则查找成功;如果不等,则根据记录到的中间位置将序列分成前后两个子序列,比较目标值与中间位置值的大小,判断目标值所在的子序列,继续查找该序列,舍弃另外一个子序列。重复以上过程,直到查找成功,或者子序列不存在的时则表示目标值查找不成功。
二分查找法一般分成三个步骤:
1、预处理阶段:主要是对原集合进行预处理。例如数列是无序的,需要先进行排序。
2、查找阶段:使用递归或者循环的方式,把查找的空间划分成两半。
3、后处理阶段:清除掉不符合需求的一半,在剩余的一半空间中确定可行的候选者。
二分法模板:基于对左、中、右索引的分配,以及终止条件和后处理的不同,可以总结出以下三个简易模板。
基础模板一:
初始条件:left=0, right=length-1
终止条件:left>right
向左查找:right=mid-1
向右查找:left=mid+1
说明:基础模板,不需要与查找元素两侧进行比较来确定查找条件,也不需要后处理操作。到达末尾没找到,则说明数列中没有目标值。
基础模板二:
初始条件:left=0, right=length-1
终止条件:left+1==right
向左查找:right=mid
向右查找:left=mid
说明:需要使用搜索元素的左右邻居来确定查找方向是向左还是向右,因此它需要保证空间的每个步骤内至少有3个元素。当剩余2个元素的时候结束循环或者递归,而且还需要判断这2个元素是否符合条件。
基础模板三:
初始条件:left=0, right=length
终止条件:left==right
向左查找:right=mid
向右查找:left=mid+1
说明:需要使用搜索元素的右邻居来确定查找方向是向左还是向右,因此它需要保证空间的每个步骤内至少有2个元素。当剩余1个元素的时候结束循环或者递归,而且还需要判断这个元素是否符合条件。
时间复杂度:O(logn)
空间复杂度:O(1)
猜你喜欢
- 2024-12-18 接口测试系列文章3——Python接口测试其实只需三步
- 2024-12-18 Python列表详解 python中列表的方法
- 2024-12-18 Python3+pygame实现的90坦克大战代码有演示效果
- 2024-12-18 python并发编程一:多进程 python 多进程原理
- 2024-12-18 小白都看懂了,Python 中的线程和进程精讲,建议收藏
- 2024-12-18 pandas每天一题-题目1、2、3 pandas选择题题库
- 2024-12-18 Python3.8+Django+nginx+uwsgi环境(二)
- 2024-12-18 一篇文章带你使用Python搞定对Excel表的读写和处理
- 2024-12-18 py2exe实现python文件打包为.exe可执行程序(上篇)
- 2024-12-18 PyPy三重发行版:支持python2.7、3.6和3.7
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)