深耕专业教研,探索前沿技术
信息技术来源:浙江省新阵地教育联盟2026届第二次联考技术试题卷

第 11 题

答案与解析

本题解析

参考答案

A

解题思路

列表a已有序,程序从末尾向前比较tmp与a[j],遇到比tmp大的元素继续向左查找,这是直接插入排序中插入一个元素的过程。本题需要增加列表长度,因此首次移动时还要利用append扩展列表。

程序分析

if tmp >= a[-1]:
    a.append(tmp)
else:
    ...

升序列表的末项是最大值。当tmp不小于末项时,直接追加即可保持升序;否则进入else分支,在原有元素之间寻找插入位置。

j = len(a) - 1
while j>=0 and tmp<a[j]:
    if (1):
        a.append(a[j])
    else:
        (2)
    j -= 1
(3)

j从原列表末项向左移动,循环只处理比tmp大的元素。已知的append语句会在列表末尾增加一个元素;其余空缺需要配合这一扩展操作,使较大元素向右让出空间,并在循环结束后完成插入。

填空分析

(1)

第一次进入循环时,j是原列表末项下标,右侧还没有可写入的位置,应通过append复制末项并扩展列表,条件为j==len(a)-1,即①。append后列表长度增加1,随后j又减1,后续各轮不再满足该条件,所以只扩展一次。

(2)

列表已经扩展后,当前a[j]仍比tmp大,应把它复制到右侧相邻位置a[j+1],为tmp腾出空间,填写a[j+1]=a[j],即③。从右向左移动可以保留尚未处理的元素。

(3)

循环结束时,若j≥0,则a[j]≤tmp,插入位置在其右侧;若j=-1,则所有原元素都比tmp大,插入位置为0。两种情况统一使用j+1,因此填写a[j+1]=tmp,即⑥。三处依次为①③⑥。