408考研逐题详解:2009年第10题

2009年第10题

若数据元素序列 11,12,13,7,8,9,23,4,5 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是( )。

A. 冒泡排序 \qquad B. 插入排序 \qquad C. 选择排序 \qquad D. 二路归并排序

详解

解答本题,需要熟悉题目中所列出的排序算法的特点,即熟悉相关算法的基本知识,特别是排序的实现过程。

  • 冒泡排序:每一趟都能确定一个元素的最终位置。假如是从小到大排序,第一趟之后,在序列的最末端应该得到最大值;第二趟之后,在序列的倒数第 2 位应该是次大值。若是从大到小排序,则第二趟之后倒数第 1 位是序列中最小值,倒数第 2 位是次小值(如下图示例)。从本题已知序列中可以观察到,不论按何种方式排序,题目中的序列均不符合上述特征。故,题目中已知序列不是冒泡排序所得到的第二趟排序后的结果。

  • 插入排序:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。以直接插入排序为例,第 1 趟取出待排序序列中第 1 个关键字,构成一个已排序的序列(记作 L);第 2 趟取出待排序序列中的第 2 个关键字,将此关键字插入到 L 中,且使 L 成为一个有序序列,也就是比较此关键字与 L 中已有关键字进行比较,并找到合适的插入位置。如此,当第 2 趟排序之后,所得到的序列中至少前两个已经排好序的(如下图示例)。从本题中已知序列可以观察到,序列前两个数值 11、12 符合上述特征。故题目中的序列有可能是插入排序的第二趟排序后的结果。

  • 选择排序:每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录序列的最后,直到全部排完为止。每趟排序后,已排序的序列中,必然是待排序序列中最小的若干个元素(如下图示例)。以题目所要求,在第二趟排序之后,所得到的序列的前两位,必然是未排序序列中最小的两个,即应该是 4、5。但题目中给出的是 11、 12,由此可知此序列不是选择排序算法所得到的第二趟排序后的结果。

  • 二路归并排序:将两个有序表合并成一个有序表的过程。初始将待排序序列中每个关键词视为一个独立的有序表。第一趟归并,即将第 1 和 第 2 个合并,得到由两个关键字组成的有序序列;以此类推合并后续各个关键字(有序表)。如此,第一趟归并后所得到的序列中,第 1 和 第 2 个关键字组成一个有序表(记为"L1"),第 3 和第 4 个关键字组成一个有序表(记为"L2"),等等。第二趟归并,则将前述 L1 和 L2 两个有序表合并,得到由 4 个关键字组成的新的有序表(如下图示例)。所以,如果用二路归并排序算法,第二趟排序之后所得到的序列中,前 4 个关键字应该是有序的,但是本题中已知序列中的前 4 个关键字"11,12,13,7"不符合此要求。故本题中的序列不是二路归并排序所得到的第二趟排序后的结果。

相关推荐
froyoisle1 小时前
CSP 真题解析:[CSP-J 2019-T4] 加工零件
c++·算法·bfs·csp-j·算法竞赛·信息学·信奥赛
兰令水1 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
Tisfy1 小时前
LeetCode 1291.顺次数:打表/枚举
算法·leetcode·题解·枚举·遍历
ysa0510302 小时前
【板子】拓扑排序
c++·算法·图论·板子
算法备案代理2 小时前
宽带自动连接保姆级教程
算法
罗超驿2 小时前
双指针算法详解:从入门到精通(Java版)
算法·leetcode·职场和发展
m0_377062922 小时前
电池电量计库伦算法计算公式
算法
patrickpdx2 小时前
高联预赛中的高斯函数问题
算法
tkevinjd3 小时前
力扣300-最长递增子序列
算法·leetcode·职场和发展·动态规划·贪心
小李飞刀李寻欢4 小时前
DeepSeek V3 版本模型结构分析
算法·大模型·deepseek