《第8章排序分析》由会员分享,可在线阅读,更多相关《第8章排序分析(11页珍藏版)》请在金锄头文库上搜索。
1、第8章排序i 选择题(1) 从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为()。A 归并排序B冒泡排序C 插入排序D 选择排序答案:C(2) 从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为()。A 归并排序B冒泡排序C 插入排序D 选择排序答案:D(3) 对n个不同的关键字由小到大进行冒泡排序,在下列()情况下比较的次数最 多。A 从小到大排列好的C 元素无序答案:BB 从大到小排列好的D .元素基本有序解释:对关键字进行冒泡排序,关键字逆序时比较次数最多A n+1B nC n-1D n(n-1)
2、/2答案:D解释:比较次数最多时,第一次比较n-1次,第二次比较n-2次最后一次比较次,即卩(n-1)+(n-2)+1= n(n-1)/2。(5)快速排序在下列()情况下最易发挥其长处。(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为A 被排序的数据中含有多个相同排序码B 被排序的数据已基本有序C.被排序的数据完全无序D 被排序的数据中的最大值和最小值相差悬殊答案:C解释:B选项是快速排序的最坏情况。(6 )对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是()A 0(n)B O(n 2)答案:B解释:快速排序的平均时间复杂度为 序的情况下,时间复杂度为0( n2
3、)。(7)若一组记录的排序码为(46, 79,一个记录为基准得到的一次划分结果为(C 0(nlog 2n)D . 0(n 3)0(nlog 2n),但在最坏情况下,即关键字基本排好56,38,40,84),则利用快速排序的方法,以第A 38,40,46,56,79,84B 40,38,46,79,56,84C. 40,38,46,56,79,84D .40,38,46,84,56,79答案:C8)下列关键字序列中,()是堆。A . 16,72,31,23,94,53B .94,23,31,72,16,53C. 16,53,23,94,31,72D .16,23,53,31,94,72答案:D解
4、释: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,46C. 84,79,56,46,40,38D 84,56,79,40,46,38答案:B(12 )下述几种排序方法中,要求内存最大的是()。A 希尔排序B 快速排序C 归并排序D堆排序答案:C解释:堆排序、希尔排序的空间复杂度
5、为0(1),快速排序的空间复杂度为O(log 2n),归并排序的空间复杂度为0(n)。(13 )下述几种排序方法中,()是稳定的排序方法。A 希尔排序B 快速排序C 归并排序D 堆排序答案:C解释:不稳定排序有希尔排序、简单选择排序、快速排序、堆排序;稳定排序有直接插入排序、折半插入排序、冒泡排序、归并排序、基数排序。(14)数据表中有 10000个元素,如果仅要求求岀其中最大的10个元素,则采用()算法最节省时间。A 冒泡排序B 快速排序C 简单选择排序D 堆排序答案:D(15)下列排序算法中,()不能保证每趟排序至少能将一个元素放到其最终的位置上。A 希尔排序B 快速排序C 冒泡排序D 堆
6、排序答案:A解释:快速排序的每趟排序能将作为枢轴的元素放到最终位置;冒泡排序的每趟排序 能将最大或最小的元素放到最终位置;堆排序的每趟排序能将最大或最小的元素放到最终位 置。2 应用题(1)设待排序的关键字序列为12 , 2, 16 , 30, 28 , 10, 16* , 20 , 6, 18,试分别写出使用以下排序方法,每趟排序结束后关键字序列的状态。 直接插入排序 折半插入排序 希尔排序(增量选取5 , 3 , 1) 冒泡排序 快速排序 简单选择排序 堆排序 二路归并排序答案:直接插入排序2121630281016*206182121630281016*20618212163028101
7、6*206182121628301016*206182101216283016*20618210121616*283020618210121616*2028306182610121616*202830182610121616*18202830折半插入排序排序过程同希尔排序(增量选取5,3, 1)102166181216*203028 (增量选取 5)621210181616*203028 (增量选取 3)2610121616*18202830 (增量选取 1)冒泡排序21216281016*2061830212161016*206182830212101616*6182028302101216
8、616*182028302101261616*182028302106121616*182028302610121616*182028302610121616*18 202830快速排序1262 1012283016*2016 1862 610| 12283016*2016 18 282 6, 1012181616*20 2830 182 6101216*161820283016* 26101216* 1618202830左子序列递归深度为1,右子序列递归深度为3简单选择排序2121630281016*20618261630281016*201218261030281616*201218261
9、012281616*203018261012162816*2030182610121616*28 2030182610121616*182030282610121616*182028302610121616*18202830二路归并排序2 1216 3010 2816 * 206 182 12 16 3010 16* 20 286 182 10 12 16 16* 20 28 302 6 10 12 16 16* 18 20 28 306 18(2)给出如下关键字序列321 , 156 ,57 , 46 , 28 , 7 , 331 , 33 , 34 , 63,试按链式排序方法,列出每一趟分
10、配和收集的过程。答案:按最低位优先法f 321 f 156 f 57 f 46 f 28 f 7 f 331 f 33 f 34 f 63分配0 1 2 3 4 5 6 7 8 932133 34156 57 283316346 7收集 f 321 f 331 f 33 f 63 f 34 f 156 f 46 f 57 f 7 f 28(3)对输入文件(101 , 51 , 19, 61 , 3, 71 , 31 , 17, 19 , 100, 55 , 20, 9, 30 , 50 ,6 , 90 );当k=6时,使用置换-选择算法,写出建立的初始败者树及生成的初始归并段。答案:初始败者树
11、615 11 1 1 1初始归并段:R1:3,19,31,51,61,71,100,101R2:9,17,19,20,30,50,55,90R 3:63 算法设计题(1)试以单链表为存储结构,实现简单选择排序算法。算法描述:voidLin kedListSelectSort(L in kedList head);若要交换指针,/本算法一趟找出一个关键字最小的结点,其数据和当前结点进行交换则须记下/当前结点和最小结点的前驱指针p=head-n ext;while( p!=n ull)q=p-next; r=p; /设r是指向关键字最小的结点的指针while (q!=n ull)if(q-datadata) r=q;q:=q_n ext;if(r!= p) r-datap-data;p=p-n ex