第20讲 内部排序 课堂互动 隐藏答案 | 返回首页

作者:欧新宇(Xinyu OU)

最后更新:2023-12-26


【课前自测20】

1. 对有 n 个元素的顺序表采用直接插入排序算法进行排序,在最坏情况下所需的比较次数是()。
A. n-1
B. n+1
C. n/2
D. n(n-1)/2

答案及解析:D
待排序表为反序时,直接插入排序需要进行n(n-1)/2次比较(从前往后依次需要比较1,2,…,n-1 次);待排序表为正序时,只需进行n-1次比较。

2. 【2015统考真题】希尔排序的组内排序采用的是()。
A. 直接插入排序
B. 折半插入排序
C. 快速排序
D. 归并排序

答案及解析:A
希尔排序的思想是:先将待排元素序列分割成若干子序列(由相隔某个“增量”的元素组成),分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。

3. 就平均性能而言,目前最好的内部排序方法是()。
A. 冒泡排序
B. 直接插入排序
C. 希尔排序
D. 快速排序

答案及解析:D
这里问的是平均性能,选项A、B 的平均性能都会达到 O(n²),而希尔排序虽然大大降低了直接插入排序的时间复杂度,但其平均性能不如快速排序。另外,虽然众多排序算法的平均时间复杂度也是O(nlog₂n),但快速排序算法的常数因子是最小的。

4 .以下排序算法中,()不需要进行关键字的比较。
A. 快速排序
B. 归并排序
C. 基数排序
D. 堆排序

答案及解析:C
基数排序是基于关键字各位的大小进行排序的,而不是基于关键字的比较进行的。

5. 快速排序算法在()情况下最不利于发挥其长处。
A. 要排序的数据量太大
B. 要排序的数据中含有多个相同值
C. 要排序的数据个数为奇数
D. 要排序的数据已基本有序

答案及解析:D
当待排序数据为基本有序时,每次选取第 n 个元素为基准,会导致划分区间分配不均匀,不利于发挥快速排序算法的优势。相反,当待排序数据分布较为随机时,基准元素能将序列划分为两个长度大致相等的序列,这时才能发挥快速排序的优势。

6. 若只想得到1000个元素组成的序列中第10个最小元素之前的部分排序的序列,用()方法最快。
A. 冒泡排序
B. 快速排序
C. 希尔排序
D. 堆排序

答案及解析:D
希尔排序和快速排序要等排序全部完成之后才能确定最小的10个元素。冒泡排序需要从后向前执行10趟冒泡才能得到10个最小的元素,而堆排序只需调整10次小根堆,调整时间与树高成正比。显然堆排序所需的时间更短。通常,取一大堆数据中的k个最大(最小)的元素时,都优先采用堆排序。

7.【2022统考真题】使用二路归并排序对含n个元素的数组M进行排序时,二路归并操作的功能是()。
A. 将两个有序表合并为一个新的有序表
B. 将M划分为两部分,两部分的元素个数大致相等
C. 将M划分为n个部分,每个部分中仅含有一个元素
D. 将M划分为两部分,一部分元素的值均小于另一部分元素的值

答案及解析:A
送分题。归并的含义是将两个或两个以上的有序表合并成一个新的有序表。二路归并是将两个有序表合并为一个新的有序表。

【课堂互动20.1】排序的基本概念

1. 下述排序方法中,不属于内部排序方法的是()。
A. 插入排序
B. 选择排序
C. 拓扑排序
D. 冒泡排序

答案及解析:C
拓扑排序是将有向图中所有结点排成一个线性序列,虽然也是在内存中进行的,但它不属于我们这里所提到的内部排序范畴,也不满足前面排序的定义。

2. 排序算法的稳定性是指()。
A. 经过排序后,能使关键字相同的元素保持原顺序中的相对位置不变
B. 经过排序后,能使关键字相同的元素保持原顺序中的绝对位置不变
C. 排序算法的性能与被排序元素个数关系不大
D. 排序算法的性能与被排序元素的个数关系密切

答案及解析:A
注意,这里的绝对位置是指若在排序前元素R 在位置i, 则绝对位置就是i, 即排序后R 的位置不发生变化,显然B 是不对的。C 、D 与题目要求无关。

3.下列关于排序的叙述中,正确的是()。
A. 稳定的排序方法优于不稳定的排序方法
B. 对同一线性表使用不同的排序方法进行排序,得到的排序结果可能不同
C. 排序方法都是在顺序表上实现的,在链表上无法实现排序方法
D. 在顺序表上实现的排序方法在链表上也可以实现

答案及解析:B
算法的稳定性与算法优劣无关, A 排除。使用链表也可以进行排序,只是有些排序算法不再适用,因为这时定位元素只能顺序逐链查找,如折半插入排序。

4. 对任意7个关键字进行基于比较的排序,至少要进行()次关键字之间的两两比较。
A. 13
B. 14
C. 15
D. 6

答案及解析:A
对于任意序列进行基于比较的排序,求至少的比较次数应考虑最坏情况。对任意n个关键字排序的比较次数至少为 log2(n!)log_2(n!)。将 n=7 代入公式,答案为13。
上述公式证明如下(仅供有兴趣的同学参考):在基于比较的排序方法中,每次比较两个关 键字后,仅出现两种可能的转移。假设整个排序过程至少需要做t 次比较,则显然会有2t2^t种情况。由于n个记录共有n!种不同的排列,因而必须有n!种不同的比较路径,于是有2tn!2^t \geq n!,即 tlog2(n!)t \geq log_2 (n!)。考虑到 t 为整数,故为log2(n!)\lceil log_2 (n!) \rceil

【课堂互动20.2】插入排序

1. 对5个不同的数据元素进行直接插入排序,最多需要进行的比较次数是()。
A. 8
B. 10
C. 15
D. 25
答案及解析:B
直接插入排序在最坏的情况下要做 n(n-1)/2 关键字的比较,当n=5时,关键字的比较次数为10。注意本题不考虑与哨兵的比较。

2. 用直接插入排序算法对下列4个表进行(从小到大)排序,比较次数最少的是()。
A. 94, 32, 40, 90, 80, 46, 21, 69
B. 21, 32, 46, 40, 80, 69, 90, 94
C. 32, 40, 21, 46, 69, 94, 90, 80
D. 90, 69, 80, 46, 21, 32, 94, 40

答案及解析:B
此题比较麻烦,需要依次计算每个选项的比较次数,但可以通过“观察法”选择基本有序的选项进行初步判定,然后再从基本有序的序列中通过比较来选择比较次数最少的。值得注意的是,直接插入法是从后往前进行比较,于是过程如下:
首先,越接近正序的序列,比较次数应是越少的;而越接近逆序,比较次数越多。不难得出选项B和C是比较接近正序的,然后分别判断两个序列的比较次数。以选项B 为例:第一趟,插入32,比较1次;第二趟,插入46,比较1次;第三趟,插入40,由于40比46小但比32大,所以比较2次;第四趟,插入80,比较1次;第五趟,插入69,比较2次...共比较9次。同理求出选项C 的比较次数为11次。故选择选项B。

3. 对序列 {98, 36, -9, 0, 47, 23, 1, 8, 10, 7} 采用希尔排序,下列序列()是增量为4的一趟排序结果。
A. {10, 7, -9, 0, 47, 23, 1, 8, 98, 36}
B. {-9, 0, 36, 98, 1, 8, 23, 47, 7, 10}
C. {36, 98, -9, 0, 23, 47, 1, 8, 7, 10}
D. 以上都不对

答案及解析:A
增量为4意味着所有相距为4的记录构成一组,然后在组内进行直接插入排序,经观察,只有选项A满足要求。选项A中,10,98进行交换,7和36也进行交换,所以其间隔可能是8,但鉴于47正好位于10和98的中间,23也为位于7和36的中间,因此其增量间隔也可能是4。对于选项B,没有满足要求的间隔。选项C中,前后两个元素进行交换,其增量间隔为1。因此,选项A是满足要求的。

4.【2012统考真题】对同一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是()。
A. 排序的总趟数
B. 元素的移动次数
C. 使用辅助空间的数量
D. 元素之间的比较次数

答案及解析:D
插入排序包含通常两个过程,一是确定待插入元素在有序表中的位置,二是移动元素,使表有序。折半插入排序与直接插入排序的区别在于确定待插入元素在有序表中的位置时,折半插入排序采用折半查找法,其复杂度为 log2nlog_2 n;而直接插入排序采用顺序查找法,其复杂度为O(n)。确定插入位置后,移动元素的次数是相同,都取决于初始序列的有序状态,其时间复杂度为 O(n2)O(n^2)。此外,两者的总趟数也是相同的,取决于元素的个数n;对于辅助空间的使用也是相同的都是O(1)。

5.【2014统考真题】用希尔排序方法对一个数据序列进行排序时,若第1趟排序结果为 9, 1, 4, 13, 7, 8, 20, 23, 15,则该趟排序采用的增量(间隔)可能是()。
A. 2
B. 3
C. 4
D. 5

答案及解析:B
在本题给定的序列中,第二个元素是1,因此该序列应该是按照从小到达的顺序进行排序。其次,对于题目给出的四个选项,只能依次代入序列进行判定。选项A,增量为2时,子序列{9, 4} 不满足要求;选项B,增量为3时,整个序列都满足要求;选项C,增量为4时,子序列 {9, 7} 不满足要求;选项D,增量为5时,子序列{9, 8}不满足要求。因此,只有选项B是满足要求的。

6.【2018统考真题】对初始数据序列 (8, 3, 9, 11, 2, 1, 4, 7, 5, 10, 6) 进行希尔排序。若第一趟排序结果为 (1, 3, 7, 5, 2, 6, 4, 9, 11, 10, 8),第二趟排序结果为 (1, 2, 6, 4, 3, 7, 5, 8, 11, 10, 9),则两趟排序采用的增量(间隔)依次是()。
A. 3, 1
B. 3, 2
C. 5, 2
D. 5, 3

答案及解析:D
如下图所示。
第一趟分组:8, 1, 6; 3, 4; 9, 7; 11, 5; 2, 10;间隔为5,排序后组内递增。
第二趟分组:1, 5, 4, 10; 3, 2, 9, 8; 7, 6, 11;间隔为3,排序后组内递增。
🏷️Img_Lec2001

故答案选 D。

【课堂互动20.3】交换排序

1. 对 n 个不同的元素利用冒泡法从小到大排序,在()情况下元素交换的次数最多。
A. 从大到小排列好的
B. 从小到大排列好的
C. 元素无序
D. 元素基本有序

答案及解析:A
通常情况下,冒泡排序最少进行1次冒泡,最多进行n-1次冒泡。初始序列为逆序时,需进行n-1 次冒泡,并且需要交换的次数最多。初始序列为正序时,进行1次冒泡(无交换)就可以终止算法。

2. 若用冒泡排序算法对序列 {10, 14, 26, 29, 41, 52} 从大到小排序,则需进行()次比较。
A. 3
B. 10
C. 15
D. 25

答案及解析:C
冒泡排序始终在调整“逆序”,因此交换次数为排列中逆序的个数。对逆序序列进行冒泡排序,每个元素向后调整时都需要进行比较,因此共需要比较5+4+3+2+1=15次。本题的排序过程如下:
第1趟:14 26 29 41 52 10 (5次)
第2趟:26 29 41 52 14 10 (4次)
第3趟:29 41 52 26 14 10 (3次)
第4趟:41 52 29 26 14 10 (2次)
第5趟:52 41 29 26 14 10 (1次)

3. 对下列关键字序列用快排进行排序时,速度最快的情形是()。
A. {21, 25, 5, 17, 9, 23, 30}
B. {25, 23, 30, 17, 21, 5, 9}
C. {21, 9, 17, 30, 25, 23, 5}
D. {5, 9, 17, 21, 23, 25, 30}

答案及解析:A
当序列完全无序时,快速排序的速度是最快的;当序列有序时,快速排序的速度是最慢的。选项D中的关键字已经有序,因此是最慢的。此外,在判断序列是否有序,可以根据枢轴是否每次都能将序列基本等分成两个子表来判断。选项A中第一趟,数轴21将表划分为两个子表{9,17,5}和{25,23,30},后对两个子表划分时,枢轴值再次将它们等分,所以该序列是快速排序最优的情况,速度最快。其他选项可以类似分析。

4. 对下列4个序列,以第一个关键字为基准用快速排序算法进行排序,在第一趟过程中移动记录次数最多的是()。
A. 92, 96, 88, 42, 30, 35, 110, 100
B. 92, 96, 100, 110, 42, 35, 30, 88
C. 100, 96, 92, 35, 30, 110, 88, 42
D. 42, 30, 35, 92, 100, 96, 88, 110

答案及解析:B
此题需要对每个选项依次进行判断:
选项A,枢轴92先存入0,96移动到位置6,35移动到位置1,30移动到位置3,枢轴92移动到位置4。共移动4次。
选项B,枢轴92先存入0,88移动到位置1,96移动到位置7,30移动到位置2,100移动到位置6,42移动到位置3,110移动到位置5,枢轴92移动到位置4。共移动7次。
选项C,枢轴100先存入0,42移动到1,88移动到3,30移动到位置5,枢轴100移动到位置6。共移动4次。
选项D,枢轴42先存入0,92移动到位置5,枢轴42移动到位置3。共移动2次。

5.【2011统考真题】为实现快速排序算法,待排序序列宜采用的存储方式是()。
A. 顺序存储
B. 散列存储
C. 链式存储
D. 索引存储

答案及解析:A
绝大部分内部排序只适用于顺序存储结构。快速排序在排序的过程中,既要从后向前查找,又要从前向后查找,因此宜采用顺序存储。

6.【2014统考真题】下列选项中,不可能是快速排序第2趟排序结果的是()。
A. 2, 3, 5, 4, 6, 7, 9
B. 2, 7, 5, 6, 4, 3, 9
C. 3, 2, 5, 4, 7, 6, 9
D. 4, 2, 3, 5, 7, 6, 9

答案及解析:C
快速排序的特点是第i趟完成后,都会有i个以上的元素出现在其最终位置,即它左边的数都比它小,它右边的数都比它大。此处,只需要考察每个选项是否至少有2个元素满足该条件。在选项A中,满足条件的元素包括 {2,3,6,7,9};选项B中,满足条件的元素包括 {2, 9};选项C中,满足条件的元素包括只有元素 {9};选项D中,满足条件的元素包括 {5, 7, 6, 9}。由此可见,选项C不满足条件,为正确选项。

【课堂互动20.4】选择排序

1. 下列()是一个堆。
A. 19, 75, 34, 26, 97, 56
B. 97, 26, 34, 75, 19, 56
C. 19, 56, 26, 97, 34, 75
D. 19, 34, 26, 97, 56, 75

答案及解析:D
可将每个选项中的序列按顺序表示成完全二叉树,然后观察是否满足大根堆或小根堆的定义。在大根堆中,所有分支结点都大于其两个叶结点;在小根堆中,所有分支结点都小于其两个叶结点。在4个选项中,只有选项D满足小根堆的定义,其他三个选项都不满足。
🏷️Img_Lec2002


2. 在含有n个关键字的小根堆中,关键字最大的记录有可能存储在()位置。
A. n/2
B. n/2+2
C. 1
D. n/2-1

答案及解析:B
在小根堆中,关键字最大的记录一定存储在堆所对应的完全二叉树的叶结点中;此外,二叉树的最后一个非叶结点存储在 n/2\lfloor n/2 \rfloor中,所以关键字最大记录的存储范围为 n/2+1n\lfloor n/2 \rfloor + 1 \sim n。满足这个要求的只有选项B。

3. 对关键码序列 {23, 17, 72, 60, 25, 8, 68, 71, 52} 进行堆排序,输出两个最小关键码后的剩余堆是 ( ) 。
A. {23, 72, 60, 25, 68, 71, 52}
B. {23, 25, 52, 60, 71, 72, 68}
C. {71, 25, 23, 52, 60, 72, 68}
D. {23, 25, 68, 52, 60, 72, 71}

答案及解析:D
观察选项可知,本题构建的是小根堆,按照小根堆的构建方法,所有分支结点都小于其两个叶结点。可以得到如下堆输出过程。首先,根据关键序列,可得初始小根堆:{8, 17, 23, 52, 25, 72, 68, 71, 60},输出结点8后,重建的堆为 {17, 25, 23, 52, 60, 72, 68, 71},再次输出结点17后,重建的堆为 {23, 25, 68, 52, 60, 72, 71}。

4. 【2009统考真题】已知关键字序列 5, 8, 12, 19, 28, 20, 15, 22 是小根堆,插入关键字3,调整好后得到的小根堆是()。
A. 3, 5, 12, 8, 28, 20, 15, 22, 19
B. 3, 5, 12, 19, 20, 15, 22, 8, 28
C. 3, 8, 12, 5, 20, 15, 22, 28, 19
D. 3, 12, 5, 8, 28, 20, 15, 22, 19

答案及解析:A
插入关键字3后,堆的变化过程如下图所示。🏷️Img_Lec2004


5.【2018统考真题】在将序列 (6, 1, 5, 9, 8, 4, 7) 建成大根堆时,正确的序列变化过程是()。
A. 6,1,7,9,8,4,5 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
B. 6,9,5,1,8,4,7 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
C. 6,9,5,1,8,4,7 → 9,6,5,1,8,4,7 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
D. 6,1,7,9,8,4,5 → 7,1,6,9,8,4,5 → 7,9,6,1,8,4,5 → 9,7,6,1,8,4,5 → 9,8,6,1,7,4,5

答案及解析:A
根据构建堆和调整堆的方法,从序列末尾开始向前遍历,变换过程如下图所示。🏷️Img_Lec2005

根据上图可以得到选项A的序列。

6.【2021统考真题】将关键字 6, 9, 1, 5, 8, 4, 7 依次插入到初始为空的大根堆H中,得到的 H是()。
A. 9, 8, 7, 6, 5, 4, 1
B. 9, 8, 7, 5, 6, 1, 4
C. 9, 8, 7, 5, 6, 4, 1
D. 9, 6, 7, 5, 8, 4, 1

答案及解析:B
根据堆的定义,可得如下构建过程:🏷️Img_Lec2006


【课堂互动20.5】归并排序和基数排序

1. 以下排序方法中,()在一趟结束后不一定能选出一个元素放在其最终位置上。
A. 简单选择排序
B. 冒泡排序
C. 归并排序
D. 堆排序

答案及解析:C
归并排序每次将两个序列合并成一个序列,并保证合并后的序列有序。但在排序最终完成前是无法确定元素的最终位置的。

2. 若对27个元素只进行三趟多路归并排序,则选取的归并路数最少为()。
A. 2
B. 3
C. 4
D. 5

答案及解析:B
对于N个元素进行k路归并排序时,排序的趟数m满足km=Nk^m=N,根据公式 3m=273^m=27,可得 m = 3。

3. 一组经过第一趟2路归并排序后的记录的关键字为 {25,50,15,35,80,85,20,40,36,70},其中包含5个长度为2的有序表,用2路归并排序方法对该序列进行第二趟归并后的结 果 为 ( ) 。
A. 15, 25, 35, 50, 80, 20, 85, 40, 70, 36
B. 15, 25, 35, 50, 20, 40, 80, 85, 36, 70
C. 15, 25, 50, 35, 80, 85, 20, 36, 40, 70
D. 15, 25, 35, 50, 80, 20, 36, 40, 70, 85

答案及解析:B
本题采用2路归并排序算法,在第二趟排序中,将4个元素进行归并,可得序列划分即排序结果 {15, 25, 35, 50}、{20, 40, 80, 85}、{36, 70},选项B正确。

4.【2013统考真题】对给定的关键字序列 110, 119, 007, 911, 114, 120, 122 进行基数排序,第2趟分配收集后得到的关键字序列是()。
A. 007, 110, 119, 114, 911, 120, 122
B. 007, 110, 119, 114, 911, 122, 120
C. 007, 110, 911, 114, 119, 120, 122
D. 110, 120, 911, 122, 114, 007, 119

答案及解析:C
对于基数排序可以采取主位优先(最高位排序优先)和次位优先(最低为排序优先)两种方法。此次,我们先以次位优先进行基数排序,可得排序序列,第一趟为 {110, 120, 911, 122, 114, 007, 119},第二趟为 {007, 110, 911, 114, 119, 120, 122},选项C符合该推导结果。

5.【2016统考真题】对10TB 的数据文件进行排序,应使用的方法是()。
A. 希尔排序
B. 堆排序
C. 快速排序
D. 归并排序

答案及解析:D
对10TB的数据进行排序,显然无法在内存中完成,需要使用外部排序。选项ABC都是内部排序,只有选项D能够完成外部排序。

6. 【2021统考真题】设数组 S[] = {93, 946, 372, 9, 146, 151, 301, 485, 236, 327, 43, 892},采用最低位优先(LSD) 基数排序将S排列成升序序列。第一趟分配、收集后,元素372之前、之后紧邻的元素分别是()。
A. 43, 892
B. 236, 301
C. 301, 892
D. 485, 301

答案及解析:C
基数排序是一种稳定的排序方法。由于采用最低位优先(LSD)的基数排序,即第一趟对个位进行分配和收集操作,因此第一趟分配和收集后的结果是 {151, 301, 372, 892, 93, 43, 485, 946, 146, 236, 327, 9},元素372之前、之后紧邻的元素分别是301和892。

【课堂互动20.6】各种内部排序算法的对比

1. 若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选()。
A. 直接插入排序
B. 选择排序
C. 基数排序
D. 快速排序

答案及解析:A
采用排除法。由于题目要求是稳定排序,排除选项B 和 D, 又由于基数排序不能对float和double 类型的实数进行排序,故排除选项C。

2. 以下排序方法中时间复杂度为O(nlog₂n)且稳定的是()。
A. 堆排序
B. 快速排序
C. 归并排序
D. 直接插入排序

答案及解析:C
堆排序和快速排序不是稳定排序方法,而直接插入排序算法的时间复杂度为O(n²)。

3. 设被排序的结点序列共有n个结点,在该序列中的结点已十分接近有序的情况下,用直接插入排序、归并排序和快速排序对其进行排序,这些算法的时间复杂度应为( )。
A. O(n), O(n), O(n)
B. O(n), O(nlog₂N), O(nlog₂n)
C. O(n), O(nlog₂N), O(n²)
D. O(n²),O(nlog₂N), O(n²)

答案及解析:C
读者应熟练掌握各种排序算法的时间和空间复杂度、稳定性等

4. 就排序算法所用的辅助空间而言,堆排序、快速排序和归并排序的关系是( )。
A. 堆排序 < 快速排序 < 归并排序
B. 堆排序 < 归并排序 < 快速排序
C. 堆排序 > 归并排序 > 快速排序
D. 堆排序 > 快速排序 > 归并排序

答案及解析:A
由于堆排序的空间复杂度为O(1),快速排序的空间复杂度在最坏情况下为O(n),平均空间复杂度为O(logn), 归并排序的空间复杂度为O(n), 所以不难得出正确选项是A。

5. 排序趟数与序列的原始状态无关的排序方法是()。
Ⅰ. 直接插入排序
Ⅱ. 简单选择排序
Ⅲ. 冒泡排序
Ⅳ. 基数排序
A.Ⅰ、Ⅲ
B.Ⅰ、Ⅱ、Ⅳ
C.Ⅰ、Ⅱ、Ⅲ
D.Ⅰ、Ⅳ

答案及解析:B
交换类的排序,其趟数和原始序列状态有关,故冒泡排序与初始序列有关。直接插入排序: 每趟排序都插入一个元素,所以排序趟数固定为n-1: 简单选择排序:每趟排序都选出一个最小 (或最大)的元素,所以排序趟数固定为n-1: 基数排序:每趟排序都要进行“分配”和“收集”,排序趟数固定为d。

6. 若序列的原始状态为 {1,2,3,4,5,10,6,7,8,9},要想使得排序过程中的元素比较次数最少,则应该采用()方法。
A. 插入排序
B. 选择排序
C. 希尔排序
D. 冒泡排序

答案及解析:A
选择排序和序列初态无关,直接排除。初始序列基本有序时,插入排序比较次数较少。本题中,插入排序仅需比较n-1+4次,而希尔排序和冒泡排序的比较次数均远大于此。

7. 一般情况下,以下查找效率最低的数据结构是()。
A. 有序顺序表
B. 二叉排序树
C. 堆
D. 平衡二叉树

答案及解析:C
堆是用于排序的,在查找时它是无序的,所以效率没有其他查找结构的高。

8. 排序趟数与序列的原始状态有关的排序方法是()排序法。
A. 插入
B. 选择
C. 冒泡
D. 基数

答案及解析:C
插入排序和选择排序的排序趟数始终为n-1, 与序列初态无关。对于冒泡排序,如果初始基 本有序,某趟比较后没有发生元素交换,则说明已排好序。基数排序的趟数由元素的位数决定, 与排列顺序无关。

9.【2012统考真题】在内部排序过程中,对尚未确定最终位置的所有元素进行一遍处理称 为一趟排序。下列排序方法中,每趟排序结束都至少能够确定一个元素最终位置的方法是()。
Ⅰ. 简单选择排序
Ⅱ. 希尔排序
Ⅲ. 快速排序
Ⅳ. 堆排序
Ⅴ. 2路归并排序

A. 仅Ⅰ、Ⅲ、Ⅳ
B. 仅Ⅰ、Ⅲ、Ⅴ
C. 仅Ⅱ、Ⅲ、Ⅳ
D. 仅 Ⅲ 、Ⅳ 、Ⅴ

答案及解析:A
对于Ⅰ,简单选择排序每次选择未排序序列中的最小元素放入其最终位置。对于选项Ⅱ,希尔排序每次对划分的子表进行排序,得到局部有序的结果,所以不能保证每趟排序结束都能确定一个元素的最终位置。对于选项Ⅲ,快速排序每趟排序结束后都将枢轴元素放到最终位置。对于选 项Ⅳ,堆排序属于选择排序,每次都将大根堆的根结点与表尾结点交换,确定其最终位置。对于选项Ⅴ,2路归并排序每趟对子表进行两两归并,从而得到若干局部有序的结果,但无法确定 最终位置。

10.【2015统考真题】下列排序算法中,元素的移动次数与关键字的初始排列次序无关的是()。
A. 直接插入排序
B. 起泡排序
C. 基数排序
D. 快速排序

答案及解析:C
基数排序的元素移动次数与关键字的初始排列次序无关,而其他三种排序都与关键字的初始排列明显相关。

11.【2017统考真题】下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是()。
Ⅰ. 插入排序
Ⅱ. 选择排序
Ⅲ .起泡排序
Ⅳ. 希尔排序
Ⅴ. 堆排序

A. 仅Ⅰ、Ⅱ
B. 仅Ⅱ、Ⅲ
C. 仅Ⅲ、Ⅳ
D. 仅Ⅳ、Ⅴ

答案及解析:D
插入排序、选择排序、起泡排序的原本时间复杂度是 O(n²),更换为链式存储后的时间复杂度还是O(n²) 。希尔排序和堆排序都利用了顺序存储的随机访问特性,而链式存储不支持这种性质,所以时间复杂度会增加,因此选择选项D。
注意:时间效率降低就是指时间复杂度增加,两者是相反的概念。

12.【2019统考真题】选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是 ( ) 。
Ⅰ. 数据的规模
Ⅱ.数据的存储方式
Ⅲ.算法的稳定性
Ⅳ.数据的初始状态
A. 仅 Ⅲ
B. 仅Ⅰ、Ⅱ
C. 仅Ⅱ、Ⅲ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ、Ⅳ

答案及解析:D
当数据规模较小时可选择复杂度为O(n²) 的简单排序方法,当数据规模较大时应选择复杂度 为O(nlog,n) 的排序方法,当数据规模大到内存无法放下时需选择外部排序方法,说法Ⅰ正确。 数据的存储方式主要分为顺序存储和链式存储,有些排序方法(如堆排序)只能用于顺序存储方 式,说法Ⅱ正确。若对数据稳定性有要求,则不能选择不稳定的排序方法,说法Ⅲ显然正确。 当数据初始基本有序时,直接插入排序的效率最高,置泡排序和直接插入排序的时间复杂度都是 O(n), 而归并排序的时间复杂度依旧是O(nlog,n), 说法Ⅳ正确。所以选择选项D。

13.【2020统考真题】对大部分元素已有序的数组排序时,直接插入排序比简单选择排序效率更高,其原因是()。
Ⅰ. 直接插入排序过程中元素之间的比较次数更少
Ⅱ. 直接插入排序过程中所需的辅助空间更少
Ⅲ. 直接插入排序过程中元素的移动次数更少
A. 仅Ⅰ
B. 仅 Ⅲ
C. 仅Ⅰ、Ⅱ
D. Ⅰ、Ⅱ和 Ⅲ

答案及解析:A
考虑较极端的情况,对于有序数组,直接插入排序的比较次数为n-1,简单选择排序的比较次数始终为1+2+…+ n-1=n(n-1)/2,说法Ⅰ正确。两种排序方法的辅助空间都是O(1), 无差别,说法Ⅱ错误。初始有序时,移动次数均为0;对于通常情况,直接插入排序每趟插入都需要依次向后挪位,而简单选择排序只需与找到的最小元素交换位置,后者的移动次数少很多,说法Ⅲ错误。

14.【2022统考真题】对数据进行排序时,若采用直接插入排序而不采用快速排序,则可能的原因是( )。
Ⅰ. 大部分元素已有序
Ⅱ. 待排序元素数量很少
Ⅲ. 要求空间复杂度为 O(1)
Ⅳ. 要求排序算法是稳定的

A. 仅Ⅰ、Ⅱ
B. 仅Ⅲ、Ⅳ
C. 仅Ⅰ、Ⅱ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ、Ⅳ

答案及解析:D
直接插入排序和快速排序的特点如下表所示。

- 适合初始序列情况 适合元素数量 空间复杂度 稳定性
直接插入排序 大部分元素已有序 很少 O(1) 稳定
快速排序 基本无序 较多 O(logn)O(log_n) 不稳定

可见,选项Ⅰ、Ⅱ、Ⅲ、Ⅳ都是采用直接插入排序而不采用快速排序的可能原因。

【扩展练习20】

1. 数据序列 {8, 10, 13, 4, 6, 7, 22, 2, 3} 只能是()两趟排序后的结果。
A. 简单选择排序
B. 起泡排序
C. 直接插入排序
D. 堆排序

答案及解析:C
冒泡排序和选择排序经过两趟排序后,应该有两个最大(或最小)元素放在其最终位置;插入排序经过两趟排序后,前3个元素应该是局部有序的。只有可能是插入排序。
注意:在排序过程中,每趟都能确定一个元素在其最终位置的有冒泡排序、简单选择排序、 堆排序、快速排序,其中前三者能形成全局有序的子序列,后者能确定枢轴元素的最终位置。

2. 在下列算法中,()算法可能出现下列情况:在最后一趟开始之前,所有元素都不在最终位置上。
A. 堆排序
B. 冒泡排序
C. 直接插入排序
D. 快速排序

答案及解析:C
在直接插入排序中,若待排序列中的最后一个元素应插入表中的第一个位置,则前面的有序子序列中的所有元素都不在最终位置上。

3. 若对于序列 {15, 9, 7, 8, 20, -1, 4} ,经一趟排序后序列变成 {9, 15, 7, 8, 20, -1, 4},则采用的是下列的 ( ) 。
A. 选择排序
B. 快速排序
C. 直接插入排序
D. 冒泡排序

答案及解析:C
在生成的序列中,前两个元素局部已经有序,很明显是经过一趟直接插入排序算法后的结果。再排除其他算法即可。选择排序、快速排序和冒泡排序,在一趟排序后应将最小/大值中的一个放入序列首位。

4. 有些排序算法在每趟排序过程中,都会有一个元素被放置到其最终位置上,()算法不会出现此种情况。
A. 希尔排序
B. 堆排序
C. 冒泡排序
D. 快速排序

答案及解析:A
由于希尔排序是基于插入排序算法而提出的,它不一定在每趟排序过程后将某一元素放置到最终位置上。

5. 以下排序算法中,不稳定的是()。
A. 冒泡排序
B. 直接插入排序
C. 希尔排序
D. 归并排序

答案及解析:C
希尔排序是一种复杂的插入排序方法,它是一种不稳定的排序方法。

6. 以下排序算法中,稳定的是()。
A. 快速排序
B. 堆排序
C. 直接插入排序
D. 简单选择排序

答案及解析:C
基于插入、交换、选择的三类排序方法中,通常简单方法是稳定的(直接插入、折半插入、 冒泡),但有一个例外就是简单选择,复杂方法都是不稳定的(希尔、快排、堆排)。

7.【2009统考真题】若数据元素序列 {11, 12, 13, 7, 8, 9, 23, 4, 5} 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是()。
A. 冒泡排序
B. 插入排序
C. 选择排序
D. 2路归并排序

答案及解析:B
每趟冒泡和选择排序后,总会有一个元素被放置在最终位置上。显然,这里{11,12}和{4,5}所处的位置并不是最终位置,因此不可能是冒泡和选择排序。2路归并算法经过第二趟后应该是每4个元素有序的,但 {11,12,13,7} 并非有序,因此也不可能是2路归并排序。(直接)插入排序在两趟排序后,有三个元素局部有有序,{11, 12, 13} 刚好满足这个条件。

8. 在待排序的元素序列基本有序的前提下,效率最高的排序方法是()。
A. 直接插入排序
B. 简单选择排序
C. 快速排序
D. 归并排序

答案及解析:A
由于这里的序列基本有序,使用直接插入排序算法的时间复杂度接近O(n), 而使用其他算法的时间复杂度均大于O(n)。

9. 对有 n 个元素的顺序表采用直接插入排序算法进行排序,在最好情况下所需的比较次数是()。
A. n-1
B. n+1
C. n/2
D. n(n-1)/2

答案及解析:A
待排序表为反序时,直接插入排序需要进行n(n-1)/2次比较(从前往后依次需要比较1,2,…,n-1 次);待排序表为正序时,只需进行n-1次比较。

10. 希尔排序属于()。
A. 插入排序
B. 交换排序
C. 选择排序
D. 归并排序

答案及解析:A
希尔排序是对直接插入排序算法改进后提出来的,它每次选取固定间隔的元素进行排序,本质上仍属于插入排序的范畴。

11. 对序列 {15, 9, 7, 8, 20, -1, 4} 用希尔排序方法排序,经一趟后序列变为 {15, -1, 4, 8, 20, 9, 7},则该次采用的增量是()。
A. 1
B. 4
C. 3
D. 2

答案及解析:B
希尔排序将序列分成若干组,记录只在组内进行交换。由观察可知,经过一趟后9和-1交换,7和4交换,可知增量为4。

12. 折半插入排序算法的时间复杂度为()。
A. O(n)
B. O(nlog₂n)
C. O(n²)
D. O(n³)

答案及解析:C
虽然折半插入排序是对直接插入排序的改进,但它改进的只是比较的次数,而移动次数未发生变化,时间复杂度仍为O(n²)。

13. 用某种排序方法对线性表 {25, 84, 21, 47, 15, 27, 68, 35, 20} 进行排序时,元素序列的变化情况如下:
1). 25, 84, 21, 47, 15, 27, 68, 35, 20
2). 20, 15, 21, 25, 47, 27, 68, 35, 84
3). 15, 20, 21, 25, 35, 27, 47, 68, 84
4). 15, 20, 21, 25, 27, 35, 47, 68, 84
则所采用的排序方法是()。

A. 选择排序
B. 插入排序
C. 2路归并排序
D. 快速排序

答案及解析:D
注意本题中,第一行的序列为初始状态。选项A,选择排序在每趟结束后都可以确定一个元素的最终位置,其他元素除与确定元素交换的元素都保持相对位置不变,显然不符合题意;选项B,插入排序在每趟结束后都可以使前i+1个元素保持有序,也不符合题意;选项C,2路归并排序在每趟结束后可以使2i个元素有序,显然也不符合题意。观察排序过程,只有选项D快速排序是正确的。

14. 数据序列 F = {2, 1, 4, 9, 8, 10, 6, 20} 只能是下列排序算法中的()两趟排序后的结果。
A. 快速排序
B. 冒泡排序
C. 选择排序
D. 插入排序

答案及解析:A
试用排除法,若为插入排序,则前三个元素应该是有序的,显然不对。而冒泡排序和选择排序经过两趟排序后应该有两个元素处于最终位置(最左端/最右端),显然也不对。因此正确的只有A选项。

15. 对 n 个关键字进行快速排序,最大递归深度为()。
A. 1
B. n
C. log2nlog_2 n
D. nlog2nnlog_2 n

答案及解析:B
快速排序过程构成一个递归树,递归深度即递归树的高度。枢轴值每次都将子表等分时,递归树的高为log2nlog_2 n; 枢轴值每次都是子表的最大值或最小值时,递归树退化为单链表,树高为n。

16. 对 n 个关键字进行快速排序,最小递归深度为()。
A. 1
B. n
C. log2nlog_2 n
D. nlog2nnlog_2 n

答案及解析:C
快速排序过程构成一个递归树,递归深度即递归树的高度。枢轴值每次都将子表等分时,递归树的高为log2nlog_2 n; 枢轴值每次都是子表的最大值或最小值时,递归树退化为单链表,树高为n。

17.【2010统考真题】对一组数据 (2, 12, 16, 88, 5, 10) 进行排序,若前3趟排序结果如下:
第一趟排序结果:2, 12, 16, 5, 10, 88
第二趟排序结果:2, 12, 5, 10, 16, 88
第三趟排序结果:2, 5, 10, 12, 16, 88
则采用的排序方法可能是()。

A. 冒泡排序
B. 希尔排序
C. 归并排序
D. 基数排序

答案及解析:A
分别用其他3种排序算法执行数据,归并排序第一趟后的结果为(2,12,16,88,5,10),基数排序第一趟后的结果为(10,2,12,5,16,88),希尔排序显然是不符合的。只有冒泡排序符合条件。
【另解】由题干可以看出每趟都产生一个最大的数排在后面,可直接定位冒泡排序。

18.【2010统考真题】采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是()。
A. 递归次数与初始数据的排列次序无关
B. 每次划分后,先处理较长的分区可以减少递归次数
C. 每次划分后,先处理较短的分区可以减少递归次数
D. 递归次数与每次划分后得到的分区的处理顺序无关

答案及解析:D
递归次数与各元素的初始排列有关,初始序列越无序快速排序性能越好。换句话说,若每次划分后分区比较平衡,则递归次数少;若分区不平衡,递归次数多。递归次数与处理顺序是没有关系的。

19. 【2019统考真题】排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是()。
A. 5, 2, 16, 12, 28, 60, 32, 72
B. 2, 16, 5, 28, 12, 60, 32, 72
C. 2, 12, 16, 5, 28, 32, 72, 60
D. 5, 2, 12, 28, 16, 32, 72, 60

答案及解析:D
快速排序的特点是第i趟完成后,都会有i个以上的元素出现在其最终位置,即它左边的数都比它小,它右边的数都比它大。此处,只需要考察每个选项是否至少有2个元素满足该条件。在选项A中,满足条件的元素包括 {28,72};选项B中,满足条件的元素包括 {2, 72};选项C中,满足条件的元素包括 {2, 28, 32};选项D中,满足条件的元素只有 {12}。由此可见,选项D不满足条件,为正确选项。

20. 对数据序列 {8, 9, 10, 4, 5, 6, 20, 1, 2} 采用冒泡排序(从后向前次序进行,要求升序),需要进行的趟数至少是()。
A. 3
B. 4
C. 5
D. 8

答案及解析:C
从后向前“冒泡”的过程为,第1趟{1,8,9,10,4,5,6,20,2},第2趟{1,2,8,9,10,4,5,6,20},第3趟{1,2,4,8,9,10,5,6,20},第4趟{1,2,4,5,8,9,10,6,20},第5趟{1,2,4,5,6,8,9,10,20}, 经过第5趟冒泡后,序列已经全局有序,故选择选项C。另解,可以观察序列中有多少个元素是无序的,此题{4,5,6,1,2} 都是无序的,需要通过冒泡算法移动到最前面,剩余的元素 {8,9,10,20} 处于相对有序,因此,需要的趟数为5。

21. 对下列关键字序列用快排进行排序时,速度最慢的情形是()。
A. {21, 25, 5, 17, 9, 23, 30}
B. {25, 23, 30, 17, 21, 5, 9}
C. {21, 9, 17, 30, 25, 23, 5}
D. {5, 9, 17, 21, 23, 25, 30}

答案及解析:D
当序列完全无序时,快速排序的速度是最快的;当序列有序时,快速排序的速度是最慢的。选项D中的关键字已经有序,因此是最慢的。

22. 一组记录的关键码为 (46, 79, 56, 38, 40, 84),则利用快速排序的方法,以第一个记录为基准,从小到大得到的一次划分结果为()
A. (38, 40, 46, 56, 79, 84)
B. (40, 38, 46, 79, 56, 84)
C. (40, 38, 46, 56, 79, 84)
D. (40, 38, 46, 84, 56, 79)

答案及解析:C
以46为基准元素,首先从后向前扫描比46小的元素,并与之进行交换,而后从前向后扫描比46大的元素并将46与该元素交换。整个第一趟的过程如下:
1). 40, 79, 56, 38, 46, 84
2). 40, 46, 56, 38, 79, 84
3). 40, 38, 56, 46, 79, 84
4). 40, 38, 46, 56, 79, 84

23. 下列序列中,()可能是执行第一趟快速排序后所得到的序列。
Ⅰ. {68, 11, 18, 69, 23, 93, 73}
Ⅱ. {68, 11, 69, 23, 18, 93, 73}
Ⅲ. {93, 73, 68, 11, 69, 23, 18}
Ⅳ. {68, 11, 69, 23, 18, 73, 93}

A. Ⅰ、Ⅳ
B. Ⅱ、Ⅲ
C. Ⅲ、Ⅳ
D. 只有Ⅳ

答案及解析:C
在快速排序中,每趟都应该能将一个序列以枢轴为中心分割成一半小于枢轴,一半大于枢轴的状态。选项Ⅰ和Ⅱ都无法进行分割。选项Ⅲ和选项Ⅳ,枢轴都是73。

24. 【2011统考真题】已知序列 25, 13, 10, 12, 9 是大根堆,在序列尾部插入新元素18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是()。
A. 1
B. 2
C. 4
D. 5

答案及解析:B
首先18与10比较,交换位置,再与25比较,不交换位置。共比较了2次。

25. 下列4种排序方法中,排序过程中的比较次数与序列初始状态无关的是()。
A. 选择排序法
B. 插入排序法
C. 快速排序法
D. 冒泡排序法

答案及解析:A
选择排序算法的比较次数始终为n(n-1)/2,与序列状态无关。

26. 在以下排序算法中,每次从未排序的记录中选取最小关键字的记一入已排序记录的末尾,该排序方法是()。
A. 简单选择排序
B. 冒泡排序
C. 堆排序
D. 直接插入排序

答案及解析:A

27. 简单选择排序算法的比较次数和移动次数分别为()。
A. O(n), O(log₂n)
B. O(log₂n), O(n²)
C. O(n²), 0(n)
D. O(nlog₂n), O(n)

答案及解析:C

28. 有一组数据 (15, 9, 7, 8, 20, -1, 7, 4),用堆排序的筛选方法建立的初始小根堆为()。
A. -1, 4, 8, 9, 20, 7, 15, 7
B. -1, 7, 15, 7, 4, 8, 20, 9
C. -1, 4, 7, 8, 20, 15, 7, 9
D. A, B, C 均不对

答案及解析:C
按照小根堆的建立方法,从第一个非叶结点开始进行调整,依次调整8,7,9,15,调整完毕后-1将做为小根堆的堆顶元素。此时,输出序列为-1, 4, 7, 8, 20, 15, 7, 9。🏷️Img_Lec2003


29. 向具有 n 个结点的堆中插入一个新元素的时间复杂度为()。
A. O(1)
B. O(n)
C. O(log₂n)
D. O(nlog₂n)

答案及解析:C
在向有n 个元素的堆中插入一个新元素时,需要调用一个向上调整的算法,比较次数最多等于树的高度减1,由于树的高度为 log2n+1\lfloor log_2 n \rfloor + 1,所以堆的向上调整算法的比较次数最多等于 log2n\lfloor log_2 n \rfloor。此处需要注意,调整堆和建初始堆的时间复杂度是不一样的。

30. 在具有n 个结点的堆中删除一个元素的时间复杂 度为()。
A. O(1)
B. O(n)
C. O(log₂n)
D. O(nlog₂n)

答案及解析:C
在向有n个元素的堆中删除一个元素的时间复杂度与插入一个元素的过程相同,都需要调用一个向上调整的算法,比较次数最多等于树的高度减1,由于树的高度为 log2n+1\lfloor log_2 n \rfloor + 1,所以堆的向上调整算法的比较次数最多等于 log2n\lfloor log_2 n \rfloor。此处需要注意,调整堆和建初始堆的时间复杂度是不一样的。
执行过程。

31. 构建n个记录的初始堆,其时间复杂度为()。
A. O(n)
B. O(n²)
C. O(log₂n)
D. O(nlog₂n)

答案及解析:A
建堆过程中,向下调整的时间与树高h有关,为O(h)。每次向下调整时,大部分结点的高度都较小。因此,可以证明在元素个数为n的序列上建堆,其时间复杂度为O(n)。无论是在最好情况下还是在最坏情况下,堆排序的时间复杂度均为O(nlog₂n)。

32. 对n个记录进行堆排序,最坏情况下其时间复杂度为()。
A. O(n)
B. O(n²)
C. O(log₂n)
D. O(nlog₂n)

答案及解析:D
建堆过程中,向下调整的时间与树高h有关,为O(h)。每次向下调整时,大部分结点的高度都较小。因此,可以证明在元素个数为n的序列上建堆,其时间复杂度为O(n)。无论是在最好情况下还是在最坏情况下,堆排序的时间复杂度均为O(nlog₂n)。

33. 【2015统考真题】已知小根堆为 8, 15, 10, 21, 34, 16, 12,删除关键字8之后需重建堆,在此过程中,关键字之间的比较次数是()。
A. 1
B. 2
C. 3
D. 4

答案及解析:C
删除8后,将12移动到堆顶,然后将15和10进行比较,小者与12进行比较并交换,第三次还需比较12和16,故比较次数为3。

34.【2020统考真题】下列关于大根堆(至少含2个元素)的叙述中,正确的是()。
Ⅰ. 可以将堆视为一棵完全二叉树
Ⅱ. 可以采用顺序存储方式保存堆
Ⅲ. 可以将堆视为一棵二叉排序树
Ⅳ. 堆中的次大值一定在根的下一层

A. 仅Ⅰ、Ⅱ
B. 仅Ⅱ、Ⅲ
C. 仅Ⅰ、Ⅱ和Ⅳ
D. Ⅰ、Ⅲ和Ⅳ

答案及解析:C
对于大根堆来说,它是一棵完全二叉树,采用顺序存储方式保存,所以选项Ⅰ和Ⅱ都正确。堆的定义是递归,所以其左右子树叶是大根堆,所以堆的次大值一定是其左孩子或右孩子,选项Ⅳ正确。但大根堆只要求结点值大于其左右孩子值,因此并不要求左右孩子值有序,所以选项Ⅲ错误。

35.【2017统考真题】在内部排序时,若选择了归并排序而未选择插入排序,则可能的理由是()。
Ⅰ. 归并排序的程序代码更短
Ⅱ. 归并排序的占用空间更少
Ⅲ. 归并排序的运行效率更高

A. 仅Ⅱ
B. 仅Ⅲ
C. 仅Ⅰ、Ⅱ
D. 仅Ⅰ、Ⅲ

答案及解析:B
归并排序代码比选择插入排序更复杂,并且前者的空间复杂度是O(n),后者只是O(1)。但前者的时间复杂度是O(nlogn), 后者的是O(n²)。所以选项B正确。

36. 若将中国人按照生日(不考虑年份,只考虑月、日)来排序,则使用下列排序算法时,最快的是()。
A. 归并排序
B. 希尔排序
C. 快速排序
D. 基数排序

答案及解析:D
首先,根据多关键字排序首先想到的就是基数排序。其次,按照所有中国人的生日排序,一方面N是非常大的,另一方面关键字所含的排序码数为2,且一个排序码的基数为12,另一个排序码的基数为31,都是较小的常数值,因此采用基数排序可以在O(N)内完成排序过程。

37. 对 {05,46,13,55,94,17,42} 进行基数排序,一趟排序的结果是()。
A. 05, 46, 13, 55, 94, 17, 42
B. 05, 13, 17, 42, 46, 55, 94
C. 42, 13, 94, 05, 55, 46, 17
D. 05, 13, 46, 55, 17, 42, 94

答案及解析:C
对于基数排序可以采取主位优先(最高位排序优先)和次位优先(最低为排序优先)两种方法。按照主位优先可得排序序列 {15, 13, 17, 46, 42, 55, 94};按照次位优先可得排序序列 {42, 13, 94, 05, 55, 46, 17}。 由此可得选项C正确,且为次位优先。

38. 下列排序方法中,排序过程中比较次数的数量级与序列初始状态无关的是()。
A. 归并排序
B. 插入排序
C. 快速排序
D. 冒泡排序

答案及解析:A
选择排序和归并排序的比较次数的数量级与序列的初始状态无关。归并排序每次对固定数量2n的元素进行合并排序,并且以倍数递增直至覆盖所有元素。

39. 2路归并排序中,归并趟数的数量级是()。
A. O(n)
B. O(log₂n)
C. O(nlog₂n)
D. O(n²)

答案及解析:B
对于N个元素进行k路归并排序时,排序的趟数m满足km=Nk^m=N,对于2路归并排序,其数量级等价于二叉树的高度,也是 log2n\lceil log_2 n \rceil

第20讲 内部排序 课堂互动 隐藏答案 | 返回首页