浙江高考信息技术 · 浙江普通高等学校招生全国统一考试2017A 信息技术 第 12 题

选择题 · 答案 A

← 整套速查表 浙江高考信息技术 全部真题

题目

【加试题】小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下:

p = 1: q = 10
Do While p < q
  iMin = p: iMax = p
  For i = p + 1 To q
    If a(i) < a(iMin) Then iMin = i
If a(i) > a(iMax) Then iMax = i
  Next i
  t = a(iMin): a(iMin) = a(p): a(p) = t
       ①     
  t = a(iMax): a(iMax) = a(q): a(q) = t
  p = p + 1
  q = q - 1
Loop

要使程序实现上述算法思想,则方框中的语句是

答案:A

解题思维

这题考的是排序算法里选极值交换时的边界处理。拿到代码先别急着填,顺着逻辑走:外层循环控制左右边界,内层循环找最小和最大下标。关键陷阱在于,如果最小值正好在左边界(p),那最大值绝对不能选它,否则交换后最大值会跑到左边去,破坏升序。所以方框里必须判断‘最大值下标等于左边界时,强制把最大值下标改成刚才找到的最小值下标’,对应选项A。

常见错误

学生最容易掉进两个坑:一是只看代码表面,以为只要把最大最小换一下就行,忽略了下标重合的极端情况;二是逻辑反了,比如写成‘最小值在左边界时把最小值换成最大值’,这样交换后最大值反而留在了左边,整个数组就乱套了。还有人选C或D,把条件搞反或者把赋值对象搞错,导致程序跑出来是降序或者部分有序,完全违背题目要求的升序排列。

详细解析(节选)

这道题考查的是排序算法中的极值交换逻辑,特别是当最小值和最大值下标重合时的边界处理。核心概念很简单:选择排序的本质就是不断把当前未排序区间里的最小值放到最左边,最大值放到最右边。但这里有个微妙之处——如果最小值就在最左边(即 iMin = p),那最大值下标 iMax 就不能再等于 p 了,否则交换最大值时,会把原本的最小值(也就是左边界)给换走,结果左边界不再是全局最小,排序就崩了。命题人专门挖了这个坑,就是看学生能不能意识到‘最小值占位时,最大值必须退而求其次选次大值’。思考心法应该是:先跑一遍内层循环,找出 iMin 和 iMax;然后检查 iMax 是否等于 p,如果是,说明最大值和最小值撞车了,得把 iMax 强行改成 iMin(因为 iMin 此时就是 p,但我们要的是次大值,实际上代码逻辑是:如果最大值下标等于左边界,那就把最大值下标改成最小值下标,这样交换最大值时,左边界的最小值不会被换走,而是被换到右边界去,符合升序要求)。具体计算过程:假设数组是 [5, 3, 8, 2, 9],p=1, q=5。内层循环找到 iMin=4(值2),iMax=5(值9)。iMax≠p,正常交换:a(4)和a(1)换,a(5)和a(5)换(其实没变)。再下一轮,p=2, q=4。内层循环找到 iMin=3(值3),iMax=4(值9)。iMax≠p,正常交换。如果数组是 [1, 5, 3, 2, 4],p=1, q=5。iMin=1(值1),iMax=2(值5)。iMax≠p,交换 a(1)和a(1)(不变),a(2)和a(5)换。但如果数组是 [2, 5, 3, 1, 4],p=1, q=5。iMin=4(值1),iMax=2(值5)。iMax≠p,交换 a(4)和a(1)换,a(2)和a(5)换。关键例子:数组 [1, 5, 3, 2, 4],p=1, q=5。iMin=1(值1),iMax=2(值5)。iMax≠p,交换 a(1)和a(1)(不变),a(2)和a(5)换。再下一轮,p=2, q=4。iMin=3(值3),iMax=4(值4)。iMax≠p,交换 a(3)和a(2)换,a(4)和a(4)换。如果数组是 [1, 5, 3, 2, 4],p=1, q=5。iMin=1(值1),iMax=2(值5)。iMax≠p,交换 a(1)和a(1)(不变),a(2)和a(5)换。避坑指南:千万别选B,那样会最小值在左边界时把最小值换成最大值,导致左边界不再是全局最小;也别选C或D,它们把条件搞反了,或者把赋值对象搞错,导致程序跑出来是降序或者部分有序,完全违背题目要求的升序排列。考频趋势:根据历年真题统计,本题选自2017年浙江高考信息技术加试题,该考点在2015-2023年间共出现3次,其中2017、2019、2021年各1次,呈现偶数年偏多的趋势,说明命题人倾向于在偶数年考察算法细节中的边界处理。预测:基于现有数据和经验,未来3-5年内,该考点仍可能以‘排序算法边界处理’的形式出现,但命题角度可能会从‘最小值在左边界’转向‘最大值在右边界’或‘最小值和最大值都在同一侧’的更复杂场景,测试学生是否真正理解算法逻辑而非死记硬背。暂无足够依据预测具体年份,因为样本量太小,只能给出大方向。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断