信息技术来源:浙江省选考科目考试绍兴市适应性试卷(2026年4月)
第 12 题
答案与解析
本题解析
参考答案
A
解题思路
程序每轮取对分点 m,找到目标后退出,否则把查找区间缩小到 m 的一侧,采用对分查找的结构。题中序列经过循环移动,整体未必升序,需要结合局部的有序关系确定查找方向。
程序分析
i, j = 0, len(a) - 1
ans = -1
while i <= j:
m = (i + j) // 2
if a[m] == key:
ans = m
break
...i、j 初值分别为首、末元素下标,查找区间覆盖整个序列。每轮计算对分点 m;若 a[m] 等于 key,将 m 存入 ans 并退出。ans 初值为 -1,用于表示尚未找到目标。
if :
if a[i] <= key < a[m]:
j = m - 1
else:
i = m + 1
else:
if a[m] < key <= a[j]:
i = m + 1
else:
j = m - 1空缺条件成立时,后续判断比较 key 与 a[i]、a[m],决定向左还是向右查找;条件不成立时,则比较 key 与 a[m]、a[j]。a[m] 已经检查且未匹配,所以移动边界时都排除下标 m。
填空分析
划线处
循环移动后的序列至多有一处由大变小的断点,因此 a[i…m] 与 a[m…j] 至少有一段升序。只有先确定某一段有序,才能用其首尾值判断 key 是否落在其中。空缺成立时使用左半段的首尾值,所以条件应判断左半段是否升序;否则由右半段的有序关系决定方向。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_shaoxingzhenduan_q012
