深耕专业教研,探索前沿技术
信息技术来源:诸暨市2026年5月高三诊断性考试

第 11 题

答案与解析

本题解析

参考答案

B

解题思路

数组a升序排列,程序取对分点并依据比较结果缩小查找区间,采用对分查找。

程序分析

a = [10,20,30,40,50,60]
i,j = 0,len(a)-1
key = int(input("请输入查找的数:"))
while i <= j:
    m = (i+j)//2
    if a[m] < key:
        i = m + 1
    else:
        j = m - 1
print(m)

i、j分别是当前查找区间的左右端点,m是本轮对分点的下标。原程序中,a[m]<key时令i=m+1,转向右半区间;否则令j=m-1,转向左半区间,因此相等时也向左查找。

改为a[m]<=key后,只有相等时的分支发生变化:从向左查找变为向右查找。循环在i>j时结束,print(m)输出最后一次比较的对分点下标,并不一定是key所在的位置。

以下用对分点元素值表示查找路径。key为20、40、60时,都是在只剩一个元素的区间内遇到相等值,向左或向右更新都会使区间变空;key为30时,首次比较就相等,后续仍有元素可查。

选项分析

A

不符合。key=20,两种程序的路径均为30→10→20,输出下标1。

B

符合。key=30,原程序向左继续查找,路径为30→10→20,输出1;修改后向右继续查找,路径为30→50→40,输出3。

C

不符合。key=40,两种程序的路径均为30→50→40,输出下标3。

D

不符合。key=60,两种程序的路径均为30→50→60,输出下标5。