深耕专业教研,探索前沿技术
信息技术来源:Z20+名校联盟2026届高三第三次学情诊断

第 11 题

答案与解析

本题解析

参考答案

D

解题思路

列表原来已升序排列,只将 d[pos] 减 2,因此该元素只可能需要向左调整。程序从 pos-1 开始向左比较,并通过相邻交换移动元素,这是插入排序中将一个元素插入前面有序区间的过程。

程序分析

j=pos-1
while j>=0:
    if :
        break
    d[j],d[j+1]=d[j+1],d[j]
    j-=1

按题意,进入这段调整程序前,d[pos] 已减 2。j 初值为 pos-1,第一轮中待调整元素位于 j+1。若没有执行 break,相邻交换将该元素移到下标 j,再执行 j-=1,下一轮它仍位于新的 j+1。因此,每轮比较对象应是左侧元素 d[j] 与当前待调整元素 d[j+1]。交换后 d[pos] 的值可能改变,不能一直用固定下标 pos 跟踪待调整元素。

填空分析

加框处

空缺条件成立时直接 break,所以这里填写的是停止调整的条件。若 d[j]>d[j+1],左右两元素逆序,必须继续交换;若 d[j]<d[j+1],由于更左侧的元素都不大于 d[j],待调整元素已到达合适位置,可以结束。因此应填 d[j]<d[j+1]。

两者相等时,该条件不成立,程序会交换两个相等值并继续向左检查,但不会破坏升序;到达合适位置或 j=-1 时仍会结束。