深耕专业教研,探索前沿技术
信息技术来源:湖州、衢州、丽水2026年4月三地市高三教学质量检测

第 11 题

答案与解析

本题解析

参考答案

B

程序分析

n=len1+len2
i,j=0,len1
while i<len1 and j<n:
    if a[i]>a[j]:
        tmp=a[j]
        for k in range(j,i,-1):
            a[k]=a[k-1]
        a[i]=tmp
        len1+=1
        j+=1
    i+=1

初始n为数组总长度,i从0开始,j从len1开始,分别指向前、后两段的首元素。循环要求i<len1且j<n。

当a[i]>a[j]时,先用tmp保存a[j],再从右向左把a[i]至a[j-1]依次右移一位,最后将tmp放入a[i],即把后段当前元素插到位置i。此时len1和j各加1,前段范围扩大,j转向后段的下一个元素。每轮末尾i都加1;若比较条件不成立,则只有i前进,j和len1不变。

关键是j+=1在if分支内,仅发生插入时才执行。逐轮比较如下:

轮次 比较前(i,j,len1) 比较与操作 轮末(i,j,len1)
1 (0,3,3) 1>2不成立,只增加i (1,3,3)
2 (1,3,3) 2>2不成立,只增加i (2,3,3)
3 (2,3,3) 3>2成立,把下标3处的2插到下标2处 (3,4,4)
4 (3,4,4) 3>3不成立,只增加i (4,4,4)

第三轮后数组为[1,2,2,3,3,3,4]。第四轮结束时i与len1均为4,条件i<len1不成立,循环结束,i的值为4。