深耕专业教研,探索前沿技术
信息技术来源:2026年3月杭州二中高三开学适应性考试

第 11 题

答案与解析

本题解析

参考答案

A

解题思路

内层循环通过比较更新下标k,结束后将a[k]与a[i]交换,这是选择排序的结构。本题以元素与24的距离abs(a[j]-target)作为比较关键字。

程序分析

a = [18, 30, 21, 28, 25, 23]
target = 24
for i in range(len(a) - 1):
    k = i
    for j in range(i + 1, len(a)):
        ...
    if k != i:
        ...

i依次取0~4。每轮先令k等于i,再扫描其右侧元素,最后根据k是否改变决定是否交换。

k = i
for j in range(i + 1, len(a)):
    if abs(a[j] - target) < abs(a[k] - target):
        k = j

只有a[j]与24的距离更小时,才将k更新为j。因此扫描结束时,k指向当前待排序区间中距离最小的元素;距离相等时不更新k,保留本轮扫描中先遇到的候选。

if k != i:
    a[i], a[k] = a[k], a[i]

若最小距离元素不在位置i,就将其交换到位置i,使已确定的前缀增加一个元素。直接交换可能改变其他元素的相对次序,因此同距离元素的最终顺序仍需依据实际交换过程判断。

初始元素18、30、21、28、25、23与24的距离依次为6、6、3、4、1、1。前两轮选取距离最小的25、23,后续各位置已满足距离从小到大的要求。

i 本轮选中的元素及位置 本轮结束后的列表
0 下标4的25;后面的23距离相等,不更新k [25,30,21,28,18,23]
1 下标5的23,与30交换 [25,23,21,28,18,30]
2~4 依次选中原位置上的21、28、18,均不交换;最后一轮18与30距离相等,仍保留18 [25,23,21,28,18,30]