- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
二分查找的循环与递归实现
一、概述
二分查找算法是一种高效的查找方法,适用于有序数据集。其核心思想是通过不断将查找区间减半,快速定位目标值。二分查找主要有两种实现方式:循环实现和递归实现。本文档将详细介绍这两种方法的原理、实现步骤及优缺点。
二、二分查找的基本原理
二分查找依赖于数据集的有序性,通过比较中间元素与目标值的大小关系,逐步缩小查找范围。具体步骤如下:
1.确定查找区间的起始索引(low)和结束索引(high)。
2.计算中间索引mid=(low+high)/2(向下取整)。
3.比较中间元素与目标值:
-若中间元素等于目标值,查找成功。
-若中间元素小于目标值,将查找区间调整为[mid+1,high]。
-若中间元素大于目标值,将查找区间调整为[low,mid-1]。
4.重复上述步骤,直到找到目标值或查找区间为空。
三、循环实现
循环实现在迭代过程中不断调整查找区间,直到找到目标值或区间为空。
(一)实现步骤
1.初始化low=0,high=数据集长度-1。
2.进入循环,条件为low=high。
3.计算中间索引mid=(low+high)/2。
4.比较中间元素与目标值:
-若相等,返回mid。
-若中间元素目标值,更新low=mid+1。
-若中间元素目标值,更新high=mid-1。
5.若循环结束仍未找到,返回-1表示未找到。
(二)示例代码(Python)
defbinary_search_iterative(arr,target):
low,high=0,len(arr)-1
whilelow=high:
mid=(low+high)//2
ifarr[mid]==target:
returnmid
elifarr[mid]target:
low=mid+1
else:
high=mid-1
return-1
(三)优缺点
1.优点:
-空间复杂度低,仅使用常数额外空间。
-无递归调用栈,适合大规模数据集。
2.缺点:
-代码相对递归实现稍显复杂。
四、递归实现
递归实现通过函数调用自身来缩小查找区间,直至找到目标值或区间为空。
(一)实现步骤
1.定义递归函数,参数包括数组、目标值、low和high。
2.基本情况:若lowhigh,返回-1。
3.计算中间索引mid=(low+high)/2。
4.比较中间元素与目标值:
-若相等,返回mid。
-若中间元素目标值,递归调用[low,mid-1]。
-若中间元素目标值,递归调用[mid+1,high]。
(二)示例代码(Python)
defbinary_search_recursive(arr,target,low,high):
iflowhigh:
return-1
mid=(low+high)//2
ifarr[mid]==target:
returnmid
elifarr[mid]target:
returnbinary_search_recursive(arr,target,mid+1,high)
else:
returnbinary_search_recursive(arr,target,low,mid-1)
(三)优缺点
1.优点:
-代码简洁,逻辑清晰。
-易于理解分治思想。
2.缺点:
-空间复杂度高,因递归调用栈占用内存。
-大规模数据集可能导致栈溢出。
五、总结
二分查找的循环实现和递归实现各有优劣。循环实现适合大规模数据集,空间效率高;递归实现代码简洁,但空间复杂度较高。实际应用中可根据场景选择合适的方式。
六、循环实现(续)
(一)实现步骤(详细版)
1.初始化查找边界:
确定数据集的起始索引`low`。通常设置为`0`,表示查找区间的最低点。
确定数据集的结束索引`high`。通常设置为`len(arr)-1`,其中`arr`是有序数组,`len()`函数获取数组的总长度,`-1`是因为索引从`0`开始。
在循环开始前,必须明确这两个边界值,它们定义了当前需要查找的子数组的范围。
2.进入循环并设定终止条件:
使用一个`while`循环来重复查找过程。
循环的继续条件必须是`low=high`。
只有当`low`索引大于`high`索引时,表示已经检查了所有可能的元素位置仍未找到目标值,此时应结束循环并返回查找失败的结果(通常返回
您可能关注的文档
最近下载
- 四级检验工理论1.docx VIP
- 附件:江苏省建设工程监理现场用(第七版).docx VIP
- 钳工中级班练习(2021-10-27).docx VIP
- DB13_T1418-2011_高温闷棚土壤消毒技术规程_河北省.docx VIP
- 《牛的解剖》课件.ppt VIP
- 新收入准则下建筑业的全流程账务处理.pdf VIP
- DB11 971-2013 重点建设工程施工现场治安防范系统规范.pdf VIP
- 钳工中级班练习(2021-11-1).docx VIP
- 《医疗器械经营质量管理基本要求》DB14T 3291-2025.pdf VIP
- 2024年中考第三次模拟考试题:道德与法治(陕西卷)(解析版).docx VIP
有哪些信誉好的足球投注网站
文档评论(0)