期中复习:多中点二分查找的困惑及具体搜索问题
兄弟,我帮你把这个二分查找的流程理得明明白白的,你刚才中间计算mid的时候应该是手滑写错了,咱们一步步拆解整个过程(前提是你的数组是升序有序的,这是二分查找的核心前提哦):
二分查找完整推演(目标值150,数组下标范围0-15)
初始状态:
- 搜索起始下标
start=0,结束下标end=15 - 目标搜索值
target=150
- 搜索起始下标
第一次迭代:
- 计算中间下标:
mid = (0 + 15) // 2 = 7(用整数除法避免浮点数,符合数组下标要求) - 下标7对应的值为90,由于
90 < 150,说明目标值在右半区间,更新搜索范围:start = mid + 1 = 8,end=15
- 计算中间下标:
第二次迭代:
- 计算中间下标:
mid = (8 + 15) // 2 = 11(这里你之前写的1是笔误啦,8+15=23,整数除以2是11) - 假设下标11对应的值为130(如果实际数组值不同,逻辑同理),由于
130 < 150,继续缩小到右半区间:start = 12,end=15
- 计算中间下标:
第三次迭代:
- 计算中间下标:
mid = (12 + 15) // 2 = 13 - 假设下标13对应的值为160,由于
160 > 150,说明目标值在左半区间,更新搜索范围:start=12,end=12
- 计算中间下标:
第四次迭代:
- 计算中间下标:
mid = (12 + 12) // 2 = 12 - 此时检查下标12对应的值:
- 如果等于150:恭喜,找到目标值,下标为12
- 如果不等于150:说明数组中不存在目标值150,查找结束
- 计算中间下标:
几个关键注意点
- 二分查找必须基于有序数组,否则无法通过中间值的大小判断目标区间
- 计算
mid的最佳实践是用start + (end - start) // 2,而不是直接(start+end)//2——这能避免当start和end数值很大时出现整数溢出的问题(Python里整数无溢出限制,但这是通用的行业规范) - 每次更新
start或end时,一定要记得+1或-1,否则可能陷入死循环(比如当start和end相邻时)
内容的提问来源于stack exchange,提问作者whatthink12
相关产品推荐
相关产品推荐

