第9章 排序 自测卷 答案 姓名 班级
题号 题分 得分 一 24 二 18 三 36 四 8 五 14 总分 100 一、填空题(每空1分,共24分)
1. 大多数排序算法都有两个基本的操作: 比较(两个关键字的大小) 和 移动(记录或改变指向记
录的指针) 。
2. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插
入到有序表时,为寻找插入位置至少需比较 3 次。(可约定为,从后向前比较)
3. 在插入和选择排序中,若初始数据基本正序,则选用 插入排序(到尾部) ;若初始数据基本反序,
则选用 选择排序 。
4. 在堆排序和快速排序中,若初始记录接近正序或反序,则选用 堆排序 ;若初始记录基本无序,则
最好选用 快速排序 。
5. 对于n个记录的集合进行冒泡排序,在最坏的情况下所需要的时间是 O(n2) 。若对其进行快速排序,
2
在最坏的情况下所需要的时间是 O(n) 。
6. 对于n个记录的集合进行归并排序,所需要的平均时间是 O(nlog2n) ,所需要的附加空间是 O(n) 。 7.【计研题2000】对于n个记录的表进行2路归并排序,整个归并排序需进行 log2n 趟(遍),共计移 动 n log2n 次记录。
(即移动到新表中的总次数!共log2n趟,每趟都要移动n个元素)
8.设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,则: 冒泡排序一趟扫描的结果是 H, C, Q, P, A, M, S, R, D, F, X ,Y ;
初始步长为4的希尔(shell)排序一趟的结果是 P, A, C, S, Q, D, F, X , R, H,M, Y ; 二路归并排序一趟扫描的结果是 H, Q, C, Y,A, P, M, S, D, R, F, X ; 快速排序一趟扫描的结果是 F, H, C, D, P, A, M, Q, R, S, Y,X ; 堆排序初始建堆的结果是 A, D, C, R, F, Q, M, S, Y,P, H, X 。
9. 在堆排序、快速排序和归并排序中, 若只从存储空间考虑,则应首先选取 堆排序 方法,其次选取 快速排序 方法,最后选取 归并排序 方法; 若只从排序结果的稳定性考虑,则应 选取归并排序方法; 若只从平均情况下最快考虑,则应选取快速排序方法;
若只从最坏情况下最快并且要节省内存考虑,则应选取堆排序方法。
二、单项选择题(每小题1分,共18分)
( C )1.将5个不同的数据进行排序,至多需要比较 次。
A. 8 B. 9 C. 10 D. 25
( C )2. 排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比
较,将其放入已排序序列的正确位置上的方法,称为
A. 希尔排序 B. 冒泡排序 C. 插入排序 D. 选择排序
( D )3. 排序方法中,从未排序序列中挑选元素,并将其依次插入已排序序列(初始时为空)的一
端的方法,称为
A. 希尔排序 B. 归并排序 C. 插入排序 D. 选择排序
( C )4.对n个不同的排序码进行冒泡排序,在下列哪种情况下比较的次数最多。
A. 从小到大排列好的 B. 从大到小排列好的 C. 元素无序 D. 元素基本有序
( D )5.对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数为
A. n+1 B. n C. n-1 D. n(n-1)/2
(前3个答案都太小了)
( C )6.快速排序在下列哪种情况下最易发挥其长处。
A. 被排序的数据中含有多个相同排序码 B. 被排序的数据已基本有序
C. 被排序的数据完全无序 D. 被排序的数据中的最大值和最小值相差悬殊
( B )7. 【计研题2001】对有n个记录的表作快速排序,在最坏情况下,算法的时间复杂度是
A.O(n) B.O(n2) C.O(nlog2n) D.O(n3)
( C )8.若一组记录的排序码为(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
( A&D )9.【计研题2001】在最好情况下,下列排序算法中 排序算法所需比较关键字次数最少。
A.冒泡 B.归并 C.快速 D.直接插入
(仅n—1次!)
( C )10. 【计研题2001】置换选择排序的功能是 。 (置换选择排序=简单选择排序?)
A.选出最大的元素 B.产生初始归并段 C.产生有序文件 D.置换某个记录
( A )11.将5个不同的数据进行排序,至少需要比较 次。
A. 4 B. 5 C. 6 D. 7
( D )12.下列关键字序列中, 是堆。
A. 16,72,31,23,94,53 B. 94,23, 31, 72, 16, 53 C. 16, 53, 23,94,31, 72 D. 16, 23, 53,31, 94, 72
( B )13.堆是一种 排序。
A. 插入 B.选择 C. 交换 D. 归并
( C )14.堆的形状是一棵
A. 二叉排序树 B.满二叉树 C. 完全二叉树 D. 平衡二叉树
( B )15.若一组记录的排序码为(46, 79, 56, 38, 40, 84),则利用堆排序的方法建立的初始堆为
A. 79, 46, 56, 38, 40, 84 B. 84, 79, 56, 38, 40, 46 C. 84, 79, 56, 46, 40, 38 D. 84, 56, 79, 40, 46, 38
( B )16. 下述几种排序方法中,平均查找长度(ASL)最小的是
A. 插入排序 B.快速排序 C. 归并排序 D. 选择排序
( C )17. 下述几种排序方法中,要求内存最大的是
2
A. 插入排序 B.快速排序 C. 归并排序 D. 选择排序
( B )18.目前以比较为基础的内部排序方法中,其比较次数与待排序的记录的初始排列状态无关的是
A. 插入排序 B. 二分插入排序 C. 快速排序 D. 冒泡排序
三、简答题(每小题4分,共36分)
1. 【全国专升本题】已知序列基本有序,问对此序列最快的排序方法是多少,此时平均复杂度是多少? 答:插入排序和冒泡应该是最快的。因为只有比较动作,无需移动元素。此时平均时间复杂度为O(n)
2. 设有1000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好采用哪种排序方法? 答:用堆排序或锦标赛排序最合适,因为不必等全部元素排完就能得到所需结果,时间效率为O(nlog2n);若用冒泡排序则需时n!/(n-10)!
3. 用某种排序方法对线性表(25, 84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下: 25, 84,21,47,15,27,68,35,20 → 20, 15, 21, 25,47, 27,68,35, 84 → 15, 20, 21, 25,35, 27, 47, 68, 84→ 15, 20, 21, 25,27, 35, 47, 68, 84, 问采用的是什么排序方法?
答:用的是快速排序方法。注意每一趟要振荡完全部元素才算一个中间结果。
4. 对于整数序列100,99,98,…3,2,1,如果将它完全倒过来,分别用冒泡排序和快速排序法,它们的比较次数和交换次数各是多少?
答:冒泡排序的比较和交换次数将最大,都是1+2+…+n-1=n(n-1)/2=50×99=4545次 快速排序则看按什么数据来分子表。
如果按100来分,则很惨,也会是n(n-1)/2! 若按中间数据50或51来分表,则:
第1轮能确定1个元素,即在1个子表中比较和交换了n-1个元素;n-(21-1) 第2轮能再确定2个元素,即在2个子表中比较和交换了n-3个元素;n-(22-1) 第3轮能再确定4个元素,即在4个子表中比较和交换了n-7个元素;n-(23-1) 第4轮能再确定8个元素,即在8个子表中比较和交换了n-15个元素;n-(24-1)
……
第6轮能再确定32个元素,即在32个子表中比较和交换了n-65个元素;n-(26-1) 第7轮则能全部确定,(因为27=128), 在100个子表中比较和交换了n-(100-1)个元素; 比较和交换总次数为:7n-(21-1+22-1+23-1……+26-1+100-1) =7n+7-(1+2+4+……+64+100)=7n-(8+16+32+164)=700-220=480次
若从中间选择初始元素,则ASL=(n+1)log2n-(21+22+23+……+2m)= nlog2n+log2n-(21+22+23+……+n)≈O(nlog2n)
5.【全国专升本试题】【严题集10.15④】设有n个值不同的元素存于顺序结构中,试问能否用比2n-3少的比较次数选出这n个元素中的最大值和最小值?若能请说明如何实现(不需写算法)。在最坏情况下至少需进行多少次比较。(或问:对含有n个互不相同元素的集合,同时找最大元和最小元至少需进行多少次比较?)
答:若用冒泡排序法,求最大值需n-1次比较;第二趟改为从n-1开始求最小值,需n-2次比较,合计2n-3次。
显然本题意图是放弃冒泡排序,寻找其他方法。
法1 :一个简单的办法是,在一趟比较时,将头两个元素分别作为最大和最小值的暂存内容,将其余n-2
3