判断题
1-1
对N个记录进行堆排序,需要的额外空间为O(N)。
T F
课本P254:堆排序仅需一个记录大小供交换用的辅助存储空间,所以空间复杂度为O(1)
1-2
对N个记录进行简单选择排序,比较次数和移动次数分别为O(N^2)和O(N)。
T F
课本P247;
1-3
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(NlogN)。
T F
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(N^2);
课本P246;
1-4
希尔排序是稳定的算法。
T F
课本P241;
希尔排序不设考点,跳过;
1-5
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。
T F
课本P243:得看"有序"是正序还是逆序;
1-6
要从50个键值中找出最大的3个值,选择排序比堆排序快。
T F
疑惑??
课本P267;
单选题
2-1
下列排序算法中,哪种算法可能出现:在最后一趟开始之前,所有的元素都不在其最终的位置上?(设待排元素个数N>2)
A.冒泡排序
B.插入排序
C.堆排序
D.快速排序
2-2
若数据元素序列{ 11,12,13,7,8,9,23,4,5 }是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是:
A.冒泡排序
B.选择排序
C.插入排序
D.归并排序
2-3
对一组数据{ 2,12,16,88,5,10 }进行排序,若前三趟排序结果如下: 第一趟排序结果:2,12,16,5,10,88 第二趟排序结果:2,12,5,10,16,88 第三趟排序结果:2,5,10,12,16,88 则采用的排序方法可能是:
A.冒泡排序
B.希尔排序
C.归并排序
D.基数排序
冒泡排序在排由小到大的时候,是先把最大的数往后移的;
2-4
下面四种排序算法中,稳定的算法是:
A.堆排序
B.希尔排序
C.归并排序
D.快速排序
课本P267;
2-5
对N个不同的数据采用冒泡算法进行从大到小的排序,下面哪种情况下肯定交换元素次数最多?
A.从小到大排好的
B.从大到小排好的
C.元素无序
D.元素基本有序
2-6
对于7个数进行冒泡排序,需要进行的比较次数为:
A.7
B.14
C.21
D.49
6+5+4+3+2+1=21;
课本P243:KCN = n(n-1)/2 = 7*(7-1)/2 = 21;
2-7
排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置的方法称为:
A.插入排序
B.选择排序
C.快速排序
D.归并排序
2-8
对一组包含10个元素的非递减有序序列,采用直接插入排序排成非递增序列,其可能的比较次数和移动次数分别是:
A.100, 100
B.100, 54
C.54, 63
D.45, 44
课本P237-238:非递减有序序列 = 正序,非递增序列 != 逆序;
直接插入排序:
最坏情况:
比较次数 KCN = (n+2)(n-1)/2 = (10+2)(10-1)/2 = 12 * 9 / 2 = 54;
移动次数 RMN = (n+4)(n-1)/2 = 14 * 9 / 2 = 63;
最好情况:
比较次数:n-1 = 9;
移动次数:0;
所以次数应介于两者之间???
2-9
有组记录的排序码为{ 46,79,56,38,40,84 },则利用堆排序的方法建立的初始堆为:
A.79,46,56,38,40,80
B.84,79,56,46,40,38
C.84,56,79,40,46,38
D.84,79,56,38,40,46
参考课本P252 例8.6:从最后一个非终端结点开始筛选;
2-10
{ 12,9,11,8,7,4,5,13,23 }是下列哪种方法第二趟排序后的结果?
A.归并排序
B.堆排序
C.插入排序
D.基数排序
2-11
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是:
A.O(N)
B.O(NlogN)
C.O(N^2)
D.O(N^2logN)
课本P246;
2-12
有组记录的排序码为{46,79,56,38,40,84 },采用快速排序(以位于最左位置的对象为基准而)得到的第一次划分结果为:
A.{38,46,79,56,40,84}
B.{38,79,56,46,40,84}
C.{38,46,56,79,40,84}
D.{40,38,46,56,79,84}
课本P244;
步骤:
快速排序:
2-13
对N个元素采用简单选择排序,比较次数和移动次数分别为:
A.O(N^2), O(N)
B.O(N), O(logN)
C.O(logN), O(N^2)
D.O(NlogN), O(NlogN)
课本P247;
2-14
对于10个数的简单选择排序,最坏情况下需要交换元素的次数为:
A.9
B.36
C.45
D.100
课本P246:最坏情况下,每趟都交换元素,因为排序共 n-1 趟,所以最多需要交换元素的次数为 n-1 = 10-1 = 9 次;
2-16
对N个记录进行堆排序,需要的额外空间为:
A.O(1)
B.O(logN)
C.O(N)
D.O(NlogN)
课本P254;
2-18
若数据元素序列{ 12, 13, 8, 11, 5, 16, 2, 9 }是采用下列排序方法之一得到的第一趟排序后的结果,则该排序算法只能是:
A.快速排序
B.选择排序
C.堆排序
D.归并排序
不懂…
2-19
给出关键字序列{ 431, 56, 57, 46, 28, 7, 331, 33, 24, 63 },下面哪个选择是按次位优先(LSD)链式基数排序进行了一趟分配和收集的结果?
A.→331→431→33→63→24→56→46→57→7→28
B.→56→28→431→331→33→24→46→57→63→7
C.→431→331→33→63→24→56→46→57→7→28
D.→57→46→28→7→33→24→63→56→431→331
基数排序不设考点,跳过;
2-20
将序列{ 2, 12, 16, 88, 5, 10, 34 }排序。若前2趟排序的结果如下:
第1趟排序后:2, 12, 16, 10, 5, 34, 88
第2趟排序后:2, 5, 10, 12, 16, 34, 88
则可能的排序算法是:
A.冒泡排序
B.快速排序
C.归并排序
D.插入排序
2-21
将序列{ 2, 12, 16, 88, 5, 10, 34 }排序。若前2趟排序的结果如下:
第1趟排序后:2, 12, 16, 10, 5, 34, 88
第2趟排序后:2, 5, 10, 12, 16, 34, 88
则可能的排序算法是:
A.冒泡排序
B.归并排序
C.插入排序
D.快速排序
2-22
将序列{ 2, 12, 16, 88, 5, 10, 34 }排序。若前2趟排序的结果如下:
第1趟排序后:2, 12, 16, 10, 5, 34, 88
第2趟排序后:2, 5, 10, 12, 16, 34, 88
则可能的排序算法是:
A.冒泡排序
B.归并排序
C.快速排序
D.插入排序
2-23
数据序列{ 3, 1, 4, 11, 9, 16, 7, 28 }只能是下列哪种排序算法的两趟排序结果?
A.冒泡排序
B.快速排序
C.插入排序
D.堆排序
2-24
设有1000个元素的有序序列,如果用二分插入排序再插入一个元素,则最大比较次数是:
A.1000
B.999
C.500
D.10
2^9 = 512;
log(1000) + 1 = 9 + 1 = 10;
2-25
选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是:
I、数据的规模
II、数据的存储方式
III、算法的稳定性
IV、数据的初始状态
A.仅 III
B.仅 I、II
C.仅 II、III、IV
D.I、II、III、IV
2-26
排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是:
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
先找第一个中间元素,满足左边的比他小,右边比他大,第二趟就是看第一个元素分割的两半,再同样找是否在子序列中,有一个中间元素满足左边的都比他小,右边的比他大;
2-27
对大部分元素已有序的数组进行排序时,直接插入排序比简单选择排序效率更高,其原因是:
(I). 直接插入排序过程中元素之间的比较次数更少
(II). 直接插入排序过程中所需要的辅助空间更少
(III). 直接插入排序过程中元素的移动次数更少
A.仅 I
B.仅 III
C.仅 I、II
D.I、II 和 III
课本P238:
(I).最好情况下,比较1次;
(II). 直接插入法只需要一个记录的辅助空间r[0],所以空间复杂度为O(1);
(III).最好情况下,不移动;
课本P247:简单选择排序:
(I).无论什么情况下,比较次数都为 n(n-1)/2;
(II). 只有在两个记录交换时需要一个辅助空间,所以空间复杂度为O(1);
(III).最好情况,不移动;
所以 (I). 对;(II). 一样,错;(III).一样,错;