《数据结构(C语言版第2版)》(严蔚敏著)
第八章练习题答案
第8章排序
1.选择题
(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列
的正确位置上的方法,这种排序方法称为()。
A.归并排序B.冒泡排序C.插入排序D.选择排序
答案:C
(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,
称为()。
A.归并排序B.冒泡排序C.插入排序D.选择排序
答案:D
(3)对n个不同的关键字由小到大进行冒泡排序,在下列()情况下比较的次数最多。
A.从小到大排列好的B.从大到小排列好的
C.元素无序D.元素基本有序
答案:B
解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。
(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为()。
A.n+1B.n C.n-1D.n(n-1)/2
答案:D
解释:比较次数最多时,第一次比较n-1次,第二次比较n-2次……最后一次比较1次,
即(n-1)+(n-2)+…+1=n(n-1)/2。
(5)快速排序在下列()情况下最易发挥其长处。
A.被排序的数据中含有多个相同排序码
B.被排序的数据已基本有序
C.被排序的数据完全无序
D.被排序的数据中的最大值和最小值相差悬殊
答案:C
解释:B选项是快速排序的最坏情况。
(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是()。
A.O(n)B.O(n2)C.O(nlog2n)D.O(n3)
答案:B
解释:快速排序的平均时间复杂度为O(nlog2n),但在最坏情况下,即关键字基本排好序
的情况下,时间复杂度为O(n2)。
(7)若一组记录的排序码为(46,79,56,38,40,84),则利用快速排序的方法,以第一
个记录为基准得到的一次划分结果为()。
A.38,40,46,56,79,84B.40,38,46,79,56,84
C.40,38,46,56,79,84D.40,38,46,84,56,79
答案:C
(8)下列关键字序列中,()是堆。
A.16,72,31,23,94,53B.94,23,31,72,16,53
C.16,53,23,94,31,72D.16,23,53,31,94,72
答案:D
解释:D选项为小根堆
(9)堆是一种()排序。
A.插入B.选择C.交换D.归并
答案:B
(10)堆的形状是一棵()。
A.二叉排序树B.满二叉树C.完全二叉树D.平衡二叉树
答案:C
(11)若一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初
始堆为()。
A.79,46,56,38,40,84B.84,79,56,38,40,46
C.84,79,56,46,40,38D.84,56,79,40,46,38
答案:B
(12)下述几种排序方法中,要求内存最大的是()。
A.希尔排序B.快速排序C.归并排序D.堆排序
答案:C
解释:堆排序、希尔排序的空间复杂度为O(1),快速排序的空间复杂度为O(log2n),归并排序的空间复杂度为O(n)。
(13)下述几种排序方法中,()是稳定的排序方法。
A.希尔排序B.快速排序C.归并排序D.堆排序
答案:C
解释:不稳定排序有希尔排序、简单选择排序、快速排序、堆排序;稳定排序有直接插入
排序、折半插入排序、冒泡排序、归并排序、基数排序。
(14)数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用()算
法最节省时间。
A.冒泡排序B.快速排序C.简单选择排序D.堆排序
答案:D
(15)下列排序算法中,()不能保证每趟排序至少能将一个元素放到其最终的位置上。
A.希尔排序B.快速排序C.冒泡排序D.堆排序
答案:A
解释:快速排序的每趟排序能将作为枢轴的元素放到最终位置;冒泡排序的每趟排序能将
最大或最小的元素放到最终位置;堆排序的每趟排序能将最大或最小的元素放到最终位置。
2.应用题
(1)设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使
用以下排序方法,每趟排序结束后关键字序列的状态。
①直接插入排序
②折半插入排序
③希尔排序(增量选取5,3,1)
④冒泡排序
⑤快速排序
⑥简单选择排序
⑦堆排序
⑧二路归并排序
答案:
①直接插入排序
[212]1630281016*20618
[21216]30281016*20618 [2121630]281016*20618 [212162830]1016*20618 [21012162830]16*20618 [210121616*2830]20618 [210121616*202830]618 [2610121616*202830]18 [2610121616*18202830]
②折半插入排序排序过程同①
③希尔排序(增量选取5,3,1)
102166181216*203028(增量选取5)621210181616*203028(增量选取3)2610121616*18202830(增量选取1)④冒泡排序
21216281016*20618[30] 212161016*20618[2830] 212101616*618[202830] 2101216616*[18202830]
21012616[16*18202830]
210612[1616*18202830]
2610[121616*18202830] 2610121616*18202830]
⑤快速排序
12[6210]12[283016*201618]
6[2]6[10]12[283016*201618]
28261012[181616*20]28[30]
18261012[16*16]18[20]2830
16*26101216*[16]18202830
左子序列递归深度为1,右子序列递归深度为3
⑥简单选择排序
2[121630281016*20618]
数据结构与算法c++版 pdf26[1630281016*201218]
2610[30281616*201218]
261012[281616*203018]
26101216[2816*203018]
2610121616*[28203018]
2610121616*18[203028]
2610121616*1820[2830]
2610121616*182028[30]
⑧二路归并排序
2121630102816*20618
21216301016*2028618
210121616*202830618
2610121616*18202830
(2)给出如下关键字序列{321,156,57,46,28,7,331,33,34,63},试按链式基数排序方法,列出每一趟分配和收集的过程。
答案:
按最低位优先法→321→156→57→46→28→7→331→33→34→63
分配[0][1][2][3][4][5][6][7][8][9]
32133341565728
33163467
收集→321→331→33→63→34→156→46→57→7→28
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论