深耕专业教研,探索前沿技术
信息技术来源:金丽衢十二校2025学年高三第二次联考

第 11 题

答案与解析

本题解析

参考答案

D

解题思路

程序通过两层循环反复比较相邻元素,并在左大右小时交换,采用相邻比较、交换的排序思路。内层循环的方向和范围尚未确定,需要结合各选项判断能否完成升序排序。

程序分析

for i in range(len(a)-1):
    for j in range():
        if a[j]>a[j+1]:
            a[j],a[j+1]=a[j+1],a[j]

数组长度为 8,外层 i 依次取 0~6,共进行 7 轮。内层每次比较 a[j] 与 a[j+1];若左侧元素较大,就交换两者,使较小值移到左侧、较大值移到右侧。一次交换只能调整这一对相邻元素,能否使整个数组有序还取决于后续比较的方向和范围。

填空分析

for j in range(<blank/>):

空缺处是 range 的参数,应使 j 和 j+1 都在有效下标范围内,并让尚未到位的元素有机会继续移动。range 不包含终止值;步长为负时,j 按递减顺序取值。

A

正确。j 从 0 递增到 len(a)-i-2,一轮比较可把当前未排定部分的最大值移到最右端。每轮少比较一个已经到位的最大值,7 轮后完成升序排序。

B

正确。j 从 i 递减到 0,每轮将新纳入的 a[i+1] 与前面元素从右向左依次比较。若前 i+1 个元素已经有序,这一轮可把新元素向左移动到合适位置,使有序前缀扩展一个元素,最终覆盖整个数组。

C

正确。填入 len(a)-2,i-1,-1,j 从 6 递减到 i;一轮可把尚未排定部分的最小值移到下标 i。随后 i 增大,保留左侧已经到位的元素,继续处理右侧,能够完成升序排序。

D

错误。j 从 i 递增到 len(a)-i-2,比较范围同时从左右两端缩小,但从左向右比较只能保证本轮最大值向右到位,不能保证左端最小值到位。本题第一轮后 a[0] 仍为 12,而最小值 2 尚未移到首位;此后 j 至少为 1,a[0] 再也不参与交换,因此不能完成升序排序。