信息技术来源:湖州、衢州、丽水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。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_huquli_q011
