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