ImageVerifierCode 换一换
你正在下载:

da10.docx

[预览]
格式:DOCX , 页数:38 ,大小:199.21KB ,
资源ID:5002511      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5002511.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(da10.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

da10.docx

1、da10 第10章 排序(参考答案)一、选择题 1.D2.D3.D4.B5.B 6.B7.C,E8.A9.C10.C,D,F11.1D,C 11.2A,D,F11.3B 11.4(A,C,F)(B,D,E)12.C,D13.A14.B,D15.D16.D17.C18.A19.A20.C21.C22.B23.C24.C25.A26.C27.D28.C29.B30.C,B31.D32.D33.A34.D35.A36.A37.A38.C39.B40.C41.C42.B43.A44.B45.A46.C47.B,D48.D49.D50.D51.C52.E,G53.B54.C55.C56.B57.B58.

2、A59.1C 59.2A 59.3D 59.4B 59.5G60.1B 60.2C 60.3A61.1B 61.2D 61.3B 61.4C 61.5F62.A63.A64.B65.A66.A部分答案解释如下:18. 对于后三种排序方法两趟排序后,序列的首部或尾部的两个元素应是有序的两个极值,而给定的序列并不满足。 20. 本题为步长为3的一趟希尔排序。 24.枢轴是73。 49. 小根堆中,关键字最大的记录只能在叶结点上,故不可能在小于等于n/2的结点上。64. 因组与组之间已有序,故将n/k个组分别排序即可,基于比较的排序方法每组的时间下界为O(klog2k),全部时间下界为O(nlog2

3、k)。二、判断题1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.部分答案解释如下:5. 错误。例如冒泡排序是稳定排序,将4,3,2,1按冒泡排序排成升序序列,第一趟变成3,2,1,4,此时3就朝向最终位置的相反方向移动。 12. 错误。堆是n个元素的序列,可以看作是完全二叉树,但相对于根并无左小右大的要求,故其既不是二叉排序树,更不会是平衡二叉树。22. 错误。待排序序列为正序时,简单插入排序比归并排序快。三、填空题1. 比较,移动 2.生成有序归并段(顺串),归并 3.希尔

4、排序、简单选择排序、快速排序、堆排序等4. 冒泡,快速 5. (1)简单选择排序 (2)直接插入排序(最小的元素在最后时) 6. 免去查找过程中每一步都要检测整个表是否查找完毕,提高了查找效率。 7. n(n-1)/2 8.题中p指向无序区第一个记录,q指向最小值结点,一趟排序结束,p和q所指结点值交换,同时向后移p指针。(1)!=null (2)p-next (3)r!=null (4)r-datadata (5)r-next (6)p-next9. 题中为操作方便,先增加头结点(最后删除),p指向无序区的前一记录,r指向最小值结点的前驱,一趟排序结束,无序区第一个记录与r所指结点的后继交换

5、指针。(1)q-link!=NULL (2)r!=p (3)p-link (4)p-link=s (5)p=p-link10.(1)in-i+1 (2)j=n-i+1 (3)rj.keyrmin.key (4)min!=i (5)max=i (6)rmaxrn-i+111.(1)N (2)0 (3)N-1 (4)1 (5)RP.KEYrj+1.key (3)true (4)rj (5)2*i19.(1)2*i (2)jheapj.key (5)ij (6)j2*i (7)x20.(1)j:=2*i (2)finished:=false (3)(rj.keyrj+1.key) (4)ri:=rj

6、 (5)i:=j (6) j:=2*i (7)ri:=t; (8)sift(r,i,n) (9)r1:=ri (10)sift(r,1,i-1) 21. 是堆 (1)选择 (2)筛选法 (3)O(nlog2n) (4)O(1)22. (1) 选择 (2)完全二叉树 (3)O(Nlog2N) (4)O(1) (5)满足堆的性质23.(1)finish:=false (2)hi:=hj; i:=j; j:=2*j; (3)hi:=x (4)h,k,n (5)sift(h,1,r-1)24. D,Q,F,X,A,P,B,N,M,Y,C,W25. (1)pk:=j (2)i:=i+1 (3)k=0 (

7、4)m:=n (5)mn (6)ai:=am (7)am:=t26. 程序(a)(1)true (2)ai:=t (3)2 TO n step 2 (4)true (5)NOT flag程序(b)(1)1 (2)ai=t (3)(i=2;ib,cd(ab和cd,则有序abd;若bdb,此时已进行了3次比较。再把另外两个元素按折半插入排序方法,插入到上述某个序列中共需4次比较,从而共需7次比较。5. 本题答案之一请参见第9章的“四、应用题”第70题,这里用分治法求解再给出另一参考答案。对于两个数x和y,经一次比较可得到最大值和最小值;对于三个数x,y,z,最多经3次比较可得最大值和最小值;对于n

8、(n3)个数,将分成长为n-2和2的前后两部分A和B,分别找出最大者和最小者:MaxA、MinA、MaxB、MinB,最后Max=MaxA,MaxB和Min=MinA,MinB。对A 使用同样的方法求出最大值和最小值,直到元素个数不超过3。设C(n)是所需的最多比较次数,根据上述原则,当n3时有如下关系式:C(n)= 通过逐步递推,可以得到:C(n)=3n/2-2。显然,当n=3时,2n-33n/2-2。事实上,3n/2-2是解决这一问题的比较次数的下限。6. 假定待排序的记录有n个。由于含n个记录的序列可能出现的状态有n!个,则描述n个记录排序过程的判定树必须有n!个叶子结点。因为若少一个叶

9、子,则说明尚有两种状态没有分辨出来。我们知道,若二叉树高度是h,则叶子结点个数最多为2h-1;反之,若有u个叶子结点,则二叉树的高度至少为log2u+1。这就是说,描述n个记录排序的判定树必定存在一条长度为log2(n!)的路径。即任何一个籍助“比较”进行排序的算法,在最坏情况下所需进行的比较次数至少是log2(n!)。根据斯特林公式,有log2(n!) =O(nlog2n)。即籍助于“比较”进行排序的算法在最坏情况下能达到的最好时间复杂度为O(nlog2n)。证毕。7. 答:拓扑排序,是有向图的顶点依照弧的走向,找出一个全序集的过程,主要是根据与顶点连接的弧来确定顶点序列;冒泡排序是借助交换

10、思想通过比较相邻结点关键字大小进行排序的算法。8. 直接插入排序的基本思想是基于插入,开始假定第一个记录有序,然后从第二个记录开始,依次插入到前面有序的子文件中。即将记录Ri(2=i=n)插入到有序子序列R1.i-1中,使记录的有序序列从R1.i-1变为R1.i ,最终使整个文件有序。共进行n-1趟插入。最坏时间复杂度是0(n2),平均时间复杂度是0(n2),空间复杂度是O(1),是稳定排序。简单选择排序的基本思想是基于选择,开始有序序列长度为零,第i(1=in)趟简单选择排序是,从无序序列Ri.n的n-i+1记录中选出关键字最小的记录,和第i个记录交换,使有序序列逐步扩大,最后整个文件有序。

11、共进行n-1趟选择。最坏时间复杂度是0(n2),平均时间复杂度是0(n2),空间复杂度是O(1),是不稳定排序。二路并归排序的基本思想是基于归并,开始将具有n个待排序记录的序列看成是n个长度为1的有序序列,然后进行两两归并,得到n/2个长度为2的有序序列,再进行两两归并,得到n/4个长度为4的有序序列。如此重复,经过log2n趟归并,最终得到一个长度为n的有序序列。最坏时间复杂度和平均时间复杂度都是0(nlog2n),空间复杂度是O(n),是稳定排序。9. 错误。快速排序,堆排序和希尔排序是时间性能较好的排序方法,但都是不稳定的排序方法。10. 等概率(后插),插入位置0.n,则平均移动个数为

12、n/2。 若不等概率,则平均移动个数为=11. 从节省存储空间考虑:先选堆排序,再选快速排序,最后选择归并排序;从排序结果的稳定性考虑:选择归并排序。堆排序和快速排序都是不稳定排序;从平均情况下排序最快考虑:先选择快速排序。12. (1)堆排序,快速排序,归并排序 (2)归并排序 (3)快速排序 (4)堆排序13. 平均比较次数最少: 快速排序; 占用空间最多: 归并排序; 不稳定排序算法:快速排序、堆排序、希尔排序。14. 求前k个最大元素选堆排序较好。因为在建含n个元素的堆时,总共进行的关键字的比较次数不超过4n ,调整建新堆时的比较次数不超过2log2n次。在n个元素中求前k个最大元素,

13、在堆排序情况下比较次数最多不超过4n+2klog2n。稳定分类是指,若排序序列中存在两个关键字值相同的记录Ri与Rj(Ki=Kj,ij)且Ri领先于Rj,若排序后Ri与Rj的相对次序保持不变,则称这类分类是稳定分类(排序),否则为不稳定分类。A,C和E是稳定分类(排序),B和D是不稳定分类(排序)。15. 16. (1)此为直接插入排序算法,该算法稳定。 (2)rO的作用是监视哨,免去每次检测文件是否到尾,提高了排序效率。采用x.keyAj+1 b:=true (2)冒泡排序 (3)499次比较,0次交换 (4) n(n-1)/2次比较,n(n-1)/2次交换(相当3n(n-1)/2次移动),

14、本题中n=500,故有124750次比较和交换(相当373250次移动)。19. 答:此排序为双向起泡排序:从前向后一趟排序下来得到一个最大值,若其中发生交换,则再从后向前一趟排序,得到一个最小值。 一趟:12,23,35,16,25,36,19,21,16,47 二趟:12,16,23,35,16,25,36,19,21,47 三趟:12,16,23,16,25,35,19,21,36,47 四趟:12,16,16,23,19,25,35,21,36,47 五趟:12,16,16,19,23,25,21,35,36,47 六趟:12,16,16,19,21,23,25,35,36,47 七趟

15、:12,16,16,19,21,23,25,35,36,4720. 对冒泡算法而言,初始序列为反序时交换次数最多。若要求从大到小排序,则表现为初始是上升序。21. 证明:起泡排序思想是相邻两个记录的关键字比较,若反序则交换,一趟排序完成得到一个极值。由题假设知Rj在Ri之前且KjRi,即说明Rj和Ri是反序;设对于Ri之前全部记录1Ri-1(其中包括Kj)中关键字最大为Kmax,则KmaxKj,故经过起泡排序前i-2次后,Ri-1的关键字一定为Kmax,又因KmaxKjRi,故Ri-1和Ri为反序,由此可知Ri-1和Ri必定交换,证毕。22.采用直接插入排序算法,因为记录序列已基本有序,直接插

16、入排序比较次数少,且由于少量次序不对的记录与正确位置不远,使直接插入排序记录移动次数也相对较少,故选直接插入排序算法。23. 各带标号语句的频度:(1)n (2)n-1 (3)(n+2)(n-1)/2 (4)n(n-1)/2 (5)n-1 时间复杂度O(n), 属于直接选择排序。24. 6, 13, 28, 39, 41, 72, 85, 20i=1 m=4 r=72013 i=3 r=3 m=32028 r=2 i=3将r+1(即第3个)后的元素向后移动,并将20放入r+1处,结果为6,13,20,28,39,41,72,85。(1)使用二分法插入排序所要进行的比较次数,与待排序的记录的初始

17、状态无关。不论待排序序列是否有序,已形成的部分子序列是有序的。二分法插入首先查找插入位置,插入位置是判定树查找失败的位置。失败位置只能在判定树的最下两层上。(2)一些特殊情况下,二分法插入排序要比直接插入排序要执行更多的比较。例如,在待排序序列已有序的情况下就是如此。25. (1)直接插入排序第一趟 (3)8,3,2,5,9,1,6 第二趟 (2)8,3,2,5,9,1,6 第三趟 (5)8,5,3,2,9,1,6第四趟 (9)9,8,5,3,2,1,6 第五趟 (1)9,8,5,3,2,1,6 第六趟 (6)9,8,6,5,3,2,1(2)直接选择排序(第六趟后仅剩一个元素,是最小的,直接选

18、择排序结束)第一趟 (9)9,3,2,5,8,1,6 第二趟 (8)9,8,2,5,3,1,6 第三趟 (6)9,8,6,5,3,1,2第四趟 (5)9,8,6,5,3,1,2 第五趟 (3)9,8,6,5,3,1,2 第六趟 (2)9,8,6,5,3,2,1 (3)直接插入排序是稳定排序,直接选择排序是不稳定排序。26.这种看法不对。本题的叙述与稳定性的定义无关,不能据此来判断排序中的稳定性。例如 5,4,1,2,3在第一趟冒泡排序后得到4,1,2,3,5。其中4 向前移动,与其最终位置相反。但冒泡排序是稳定排序。快速排序中无这种现象。27. 125,11,22,34,15,44,76,66

19、,100,8,14,20,2,5,1设D=7 1,11,8,14,15,2,5,66,100,22,34,20,44,76,125D=3 1,11,2,5,15,8,14,34,20,22,66,100,44,76,125D=1 1,2,5,8,11,14,15,20,22,34,44,66,76,100,12528. 设待排序记录的个数为n,则快速排序的最小递归深度为log2n+1,最大递归深度n。29. 平均性能最佳的排序方法是快速排序,该排序方法不稳定。初始序列: 50,10,50,40,45,85,80 一趟排序: 45,10,50,40 50 85,80 二趟排序: 40,10 45

20、 50 50 80 85 三趟排序: 10,40,45,50,50,80,85 30. 快速排序。31. (1) 在最好情况下,假设每次划分能得到两个长度相等的子文件,文件的长度n=2k-1,那么第一遍划分得到两个长度均为n/2的子文件,第二遍划分得到4个长度均为n/4的子文件,以此类推,总共进行k=log2(n+1)遍划分,各子文件的长度均为1,排序完毕。当n=7时,k=3,在最好情况下,第一遍需比较6次,第二遍分别对两个子文件(长度均为3,k=2)进行排序,各需2次,共10次即可。(2) 在最好情况下快速排序的原始序列实例:4,1,3,2,6,5,7。(3) 在最坏情况下,若每次用来划分的

21、记录的关键字具有最大值(或最小值),那么只能得到左(或右)子文件,其长度比原长度少1。因此,若原文件中的记录按关键字递减次序排列,而要求排序后按递增次序排列时,快速排序的效率与冒泡排序相同,其时间复杂度为O(n2)。所以当n=7时,最坏情况下的比较次数为21次。(4) 在最坏情况下快速排序的初始序列实例: 7,6,5,4,3,2,1,要求按递增排序。32.该排序方法为快速排序。33. 不是。因为当序列已有序时,快速排序将退化成冒泡排序,时间复杂度为O(n2)。当待排序序列无序,使每次划分完成后,枢轴两侧子文件长度相当,此时快速排序性能最好。 34. 初始序列:28,07,39,10,65,14

22、,61,17,50,21 21移动:21,07,39,10,65,14,61,17,50,39移动:21,07,10,65,14,61,17,50,39 17移动:21,07,17,10,65,14,61,50,3965移动:21,07,17,10,14,61,65,50,39 14移动:21,07,17,10,14,28,61,65,50,39类似本题的另外叙述题的解答:(1):快速排序思想:首先将待排序记录序列中的所有记录作为当前待排序区域,以第一个记录的关键字作为枢轴(或支点)(pivot),凡其关键字不大于枢轴的记录均移动至该记录之前,凡关键字不小于枢轴的记录均移动至该记录之后。致使一

23、趟排序之后,记录的无序序列Rs.t将分割成两部分:Rs.i-1和Ri+1.t,且Rj.keyRi.keyRk.key(sji,ikt),然后再递归地将Rs.i-1和Ri+1.t进行快速排序。快速排序在记录有序时蜕变为冒泡排序,可用“三者取中”法改善其性能,避免最坏情况的出现。具体排序实例不再解答。35(1)不可以,若m+1到n之间关键字都大于m的关键字时,=k可将j定位到m上,若为k,则在1至i-1间继续进行快速排序的划分;若ik,则在i+1至n间继续进行快速排序的划分。这种划分一直进行到i=k为止,第i位置上的元素就是第k(1kn)个最小元素。37. 快速排序各次调用结果:一次调用:18,36,77,42,23,65,84,10,59,37,61,98 二次调用:10,18,77,42,23,65,84,36,59,37,61,98 三次调用:10,18,61,42,23,65,37,36,59,77,84,98归

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1