1第10章排序练习题答案一、填空题1.大多数排序算法都有两个基本的操作:比较和移动。2.在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置至少需比较3次。3.在插入和选择排序中,若初始数据基本正序,则选用插入;若初始数据基本反序,则选用选择。正序时两种方法移动次数均为0,但比较次数量级不同,插入法:n-1即O(n),选择法:O(n2)反序时两种方法比较次数量级相同,均为O(n2),但移动次数不同,插入法:O(n2),选择法:3(n-1)即O(n)4.在堆排序和快速排序中,若初始记录接近正序或反序,则选用堆排序;若初始记录基本无序,则最好选用快速排序。5.对于n个记录的集合进行冒泡排序,在最坏的情况下所需要的时间是O(n2)。若对其进行快速排序,在最坏的情况下所需要的时间是O(n2)。6.对于n个记录的集合进行归并排序,所需要的平均时间是O(nlog2n),所需要的附加空间是O(n)。7.对于n个记录的表进行2路归并排序,整个归并排序需进行┌log2n┐趟(遍)。8.设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键码按字母序的升序重新排列,则:冒泡排序一趟扫描的结果是HCQPAMSRDFXY;二路归并排序一趟扫描的结果是HQCYAPMSDRFX;快速排序一趟扫描的结果是FHCDPAMQRSYX;堆排序初始建堆的结果是YSXRPCMHQDFA。(大根堆)9.在堆排序、快速排序和归并排序中,若只从存储空间考虑,则应首先选取堆排序方法,其次选取快速排序方法,最后选取归并排序方法;若只从排序结果的稳定性考虑,则应选取归并排序方法;若只从平均情况下最快考虑,则应选取快速排序方法;若只从最坏情况下最快并且要节省内存考虑,则应选取堆排序方法。二、单项选择题(C)1.排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为A.归并排序B.冒泡排序C.插入排序D.选择排序(D)2.从未排序序列中挑选元素,并将其依次插入已排序序列(初始时为空)的一端的方法,称为A.冒泡排序B.归并排序C.插入排序D.选择排序(B)3.对n个不同的排序码进行冒泡排序,在下列哪种情况下比较的次数最多。A.从小到大排列好的B.从大到小排列好的C.元素无序D.元素基本有序(D)4.对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数为A.n+1B.nC.n-1D.n(n-1)/22(C)5.快速排序在下列哪种情况下最易发挥其长处。A.被排序的数据中含有多个相同排序码B.被排序的数据已基本有序C.被排序的数据完全无序D.被排序的数据中的最大值和最小值相差悬殊(B)6.对有n个记录的表作快速排序,在最坏情况下,算法的时间复杂度是A.O(n)B.O(n2)C.O(nlog2n)D.O(n3)(C)7.若一组记录的排序码为(46,79,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(D)8.下列关键字序列中,是堆。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(B)9.堆是一种排序。A.插入B.选择C.交换D.归并(C)10.堆的形状是一棵A.二叉排序树B.满二叉树C.完全二叉树D.平衡二叉树(B)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(C)12.下述几种排序方法中,要求内存最大的是A.插入排序B.快速排序C.归并排序D.选择排序三、简答题设待排序的关键码序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使用以下排序方法每趟排序后的结果。(1)直接插入排序(2)起泡排序(3)直接选择排序(4)快速排序(5)二路归并排序(6)堆排序(1)直接插入排序[12]21630281016*20618[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](2)起泡排序21216281016*20618[30]212161016*20618[2830]3212101616*618[202830]2101216616*[18202830]21012616[16*18202830]210612[1616*18202830]2610[121616*18202830]2610121616*18202830](3)直接选择排序2[121630281016*20618]26[1630281016*201218]2610[30281616*201218]261012[281616*203018]26101216[2816*203018]2610121616*[28203028]2610121616*18[203028]2610121616*1820[2830]2610121616*182028[30](4)快速排序12[1221630281016*20618]6[6210]12[283016*201618]28[2]6[10]12[283016*201618]18261012[181616*20]28[30]16*261012[16*16]18[20]283026101216*[16]18202830左子序列递归深度为1,右子序列递归深度为3。(5)二路归并排序1221630281016*206182121630102816*2061821216301016*2028618210121616*2028306182610121616*18202830(6)堆排序第一步,形成初始大根堆(详细过程略),第二步做堆排序。4初始排序不是大根堆形成初始大根堆交换1与10对象从1到9重新形成堆交换1与9对象从1到8重新形成堆交换1与8对象从1到7重新形成堆2181620101216*6283018121610216*12203028620162101216*182830201816101216*6230281228162102016*18630282016101216*1823061221620103016*28618302816102016*1821265交换1与7对象从1到6重新形成堆交换1与6对象从1到5重新形成堆交换1与5对象从1到4重新形成堆交换1与4对象从1到3重新形成堆126102016*1218162830106216*121816203028612102016*2181628301261016*218162030281012162016*2186283016121016*218620302816*121620102186283016*12161021862030286交换1与3对象从1到2重新形成堆交换1与2对象得到结果26102016*1218162830261016*12181620302826102016*1218162830621016*121816203028