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