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"不符合此要求。故本题中的序列不是二路归并排序所得到的第二趟排序后的结果。

相关推荐
橘子汽水16836 分钟前
Leetcode 23,543合并K个升序链表,二叉树的直径
算法·leetcode·链表
huameinan狮子43 分钟前
Adaboost算法原理与计算实例
算法
别怪我很水1 小时前
API中提供了VelocityTracker类用于计算触摸事件MotionEvent的速度,而其内部默认使用的方法就是最小二乘法,本 ...
算法·gitee·最小二乘法
Re.不晚4 小时前
挑战做100道力扣算法- DAY1
算法·leetcode·职场和发展
蓝悦无人机4 小时前
《Planning algorithms》读书笔记——第1章 引言
算法·读书笔记·规划算法·lavalle
Sagittarius_A*5 小时前
分组密码基础(二):Feistel 结构与 DES 的设计思想
算法·信息安全·密码学·des·数论
青山木5 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
alexwang2115 小时前
HDU 4348 详细题解
c++·算法·题解·hdu·主席树·可持久化数据结构·可持久化线段树
可编程芯片开发6 小时前
基于分段变步长搜索RMDCFT算法的天基雷达空间机动目标检测方法MATLAB仿真,对比RMDCFT算法
算法