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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构》习题汇编09 第九章 排序 试题.docx

1、数据结构习题汇编09 第九章 排序 试题数据结构课程(本科)第九章试题一、 单项选择题1. 若待排序对象序列在排序前已按其排序码递增顺序排列,则采用( )方法比较次数最少。A. 直接插入排序 B. 快速排序C. 归并排序 D. 直接选择排序2. 如果只想得到1024个元素组成的序列中的前5个最小元素,那么用( )方法最快。A. 起泡排序 B. 快速排序C. 直接选择排序 D. 堆排序3. 对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是( )。A. 直接选择排序 B. 直接插入排序 C. 快速排序 D.

2、起泡排序4. 对5个不同的数据元素进行直接插入排序,最多需要进行( )次比较?A. 8 B. 10C. 15 D. 255. 如果输入序列是已经排好顺序的,则下列算法中( )算法最快结束?A. 起泡排序 B. 直接插入排序C. 直接选择排序 D. 快速排序6. 如果输入序列是已经排好顺序的,则下列算法中( )算法最慢结束?A. 起泡排序 B. 直接插入排序C. 直接选择排序 D. 快速排序7. 下列排序算法中( )算法是不稳定的。A. 起泡排序 B. 直接插入排序C. 基数排序 D. 快速排序8. 假设某文件经过内部排序得到100个初始归并段,那么如果要求利用多路平衡归并在3 趟内完成排序,则

3、应取的归并路数至少是( )。A. 3 B. 4 C. 5 D. 69. 采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要( )次比较。A. 5 B. 6 C. 7 D. 810. 下列算法中( )算法不具有这样的特性:对某些输入序列,可能不需要移动数据对象即可完成排序。A. 起泡排序 B. 希尔排序C. 快速排序 D. 直接选择排序11. 使用递归的归并排序算法时,为了保证排序过程的时间复杂度不超过O(nlog2n),必须做到( )。A. 每次序列的划分应该在线性时间内完成B. 每次归并的两个子序列长度接近C. 每次归并在线性时间内完成D. 以上全是12. 在基于排序码比较的排

4、序算法中,( )算法的最坏情况下的时间复杂度不高于O(nlog2n)。A. 起泡排序 B. 希尔排序C. 归并排序 D. 快速排序13. 在下列排序算法中,( )算法使用的附加空间与输入序列的长度及初始排列无关。A. 锦标赛排序 B. 快速排序C. 基数排序 D. 归并排序14. 一个对象序列的排序码为 46, 79, 56, 38, 40, 84 ,采用快速排序(以位于最左位置的对象为基准而)得到的第一次划分结果为:A. 38, 46, 79, 56, 40, 84 B. 38, 79, 56, 46, 40, 84 C. 40, 38, 46, 79, 56, 84 D. 38, 46,

5、56, 79, 40, 84 15. 如果将所有中国人按照生日(不考虑年份,只考虑月、日)来排序,那么使用下列排序算法中( )算法最快。A. 归并排序 B. 希尔排序C. 快速排序 D. 基数排序参考答案: 1. A 2. D 3. C 4. B 5. A6. D 7. D 8. C 9. C 10. C11. D 12. C 13. C 14. C 15. D二、 填空题1. 第i (i = 1, 2, , n-1) 趟从参加排序的序列中取出第i个元素,把它插入到由第0个第i-1个元素组成的有序表中适当的位置,此种排序方法叫做_排序。2. 第i (i = 0, 1, , n-2) 趟从参加排

6、序的序列中第i个第n-1个元素中挑选出一个最小(大)元素,把它交换到第i个位置,此种排序方法叫做_排序。3. 每次直接或通过基准元素间接比较两个元素,若出现逆序排列,就交换它们的位置,这种排序方法叫做_排序。4. 每次使两个相邻的有序表合并成一个有序表,这种排序方法叫做_排序。5. 在直接选择排序中,排序码比较次数的时间复杂度为O(_)。6. 在直接选择排序中,数据对象移动次数的时间复杂度为O(_)。7. 在堆排序中,对n个对象建立初始堆需要调用_次调整算法。8. 在堆排序中,如果n个对象的初始堆已经建好,那么到排序结束,还需要从堆顶结点出发调用_次调整算法。9. 在堆排序中,对任一个分支结点

7、进行调整运算的时间复杂度为O(_)。10. 对n个数据对象进行堆排序,总的时间复杂度为O(_)。11. 给定一组数据对象的排序码为 46, 79, 56, 38, 40, 84 ,则利用堆排序方法建立的初始堆(最大堆)为_。12. 快速排序在平均情况下的时间复杂度为O(_)。13. 快速排序在最坏情况下的时间复杂度为O(_)。14. 快速排序在平均情况下的空间复杂度为O(_)。15. 快速排序在最坏情况下的空间复杂度为O(_)。16. 给定一组数据对象的排序码为 46, 79, 56, 38, 40, 84,对其进行一趟快速排序,结果为_。17. 在n个数据对象的二路归并排序中,每趟归并的时间

8、复杂度为O(_)。18. 在n个数据对象的二路归并排序中,整个归并的时间复杂度为O(_)。参考答案: 1. 插入 2. 直接选择 3. 交换 4. 两路归并 5. n2 6. n 7. n/2 8. n-1 9. log2n 10. nlog2n 11. 84, 79, 56, 38, 40, 46 12. nlog2n13. n2 14. log2n 15. n16. 40 38 46 79 56 84 17. n 18. nlog2n三、判断题1. 直接选择排序是一种稳定的排序方法。2. 若将一批杂乱无章的数据按堆结构组织起来, 则堆中各数据是否必然按自小到大的顺序排列起来。3. 当输入序

9、列已经有序时,起泡排序需要的排序码比较次数比快速排序要少。4. 在任何情况下,快速排序需要进行的排序码比较的次数都是O(nlog2n)。5. 在2048 个互不相同的排序码中选择最小的5个排序码,用堆排序比用锦标赛排序更快。6. 若用m个初始归并段参加k路平衡归并排序,则归并趟数应为 log2m。7. 堆排序是一种稳定的排序算法。8. 对于某些输入序列,起泡排序算法可以通过线性次数的排序码比较且无需移动数据对象就可以完成排序。9. 如果输入序列已经排好序,则快速排序算法无需移动任何数据对象就可以完成排序。10. 希尔排序的最后一趟就是起泡排序。11. 任何基于排序码比较的算法,对n个数据对象进

10、行排序时,最坏情况下的时间复杂度不会低于O(nlog2n)。12. 不存在这样一个基于排序码比较的算法:它只通过不超过9次排序码的比较,就可以对任何6个排序码互异的数据对象实现排序。参考答案: 1. 否 2. 否 3. 是 4. 否 5. 否6. 否 7. 否 8. 是 9. 否 10. 是11. 是 12. 是四、 运算题1. 判断以下序列是否是最小堆?如果不是, 将它调整为最小堆。(1) 100, 86, 48, 73, 35, 39, 42, 57, 66, 21 (2) 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 。2. 在不要求完全排序时,堆排序是一

11、种高效的算法。这种算法的过程是:(Heapification)把待排序序列看作一棵完全二叉树,通过反复筛选将其调整为堆;(Re-heapification)依次取出堆顶,然后将剩余的记录重新调整为堆。现考虑序列A = 23,41,7,5,56 :(1) 给出对应于序列A的最小堆HA(以线性数组表示);(2) 给出第一次取出堆顶后,重新调整HA后的结果(以线性数组表示);(3) 给出第二次取出堆顶后,重新调整HA后的结果(以线性数组表示)。3. 希尔排序、直接选择排序、快速排序和堆排序是不稳定的排序方法, 试举例说明。4. 给出12个初始归并段,其长度分别为19, 22, 17, 16, 11,

12、 10, 12, 32, 26, 20, 28, 07。现要做4路外归并排序,试画出表示归并过程的最佳归并树,并计算该归并树的带权路径长度WPL。5. 设输入文件包含以下数据对象的排序码:14, 22, 7, 16, 11, 10, 12, 90, 26, 30, 28, 110。现采用置换选择方法生成初始归并段,并假设内存工作区可同时容纳5个数据对象,请画出生成初始归并段的过程。6. 在利用置换选择方法生成初始归并段时,可另开辟一个与工作区容量相同的辅助存储区(称为储备库)。当输入对象排序码小于刚输出的门槛LastKey对象的排序码时,不将它存入工作区,而暂存于储备库中,接着输入下一对象的排

13、序码,依次类推,直到储备库满时不再进行输入,而只是从工作区中选择对象输出直至工作区空为止,由此得到一个初始归并段。然后再将储备库中的对象传送至工作区,重新开始置换选择。若设输入文件包含对象的排序码为19, 22, 17, 16, 11, 10, 12, 32, 26, 20, 28, 07。采用上述方法生成初始归并段,并设工作区可容纳5个对象,请画出生成初始归并段的过程。7. 假设文件有4500个记录,在磁盘上每个页块可放75个记录。计算机中用于排序的内存区可容纳450个记录。试问: (1) 可建立多少个初始归并段?每个初始归并段有多少记录?存放于多少个页块中? (2) 应采用几路归并?请写出

14、归并过程及每趟需要读写磁盘的页块数。8. 如果某个文件经内排序得到80个初始归并段,试问 (1) 若使用多路归并执行3趟完成排序,那么应取的归并路数至少应为多少?(2) 如果操作系统要求一个程序同时可用的输入/输出文件的总数不超过15个,则按多路归并至少需要几趟可以完成排序?如果限定这个趟数,可取的最低路数是多少?参考答案:1. (1) 100, 86, 48, 73, 35, 39, 42, 57, 66, 21 为最大堆。 调整为最小堆后为 21, 35, 39, 57, 86, 48, 42, 73, 66, 100 (2) 12, 70, 33, 65, 24, 56, 48, 92,

15、 86, 33 不是最小堆。 调整为最小堆后为 12, 24, 33, 65, 33, 56, 48, 92, 86, 70 2. (1) 建堆结果HA =52374156(2) 第一次取出堆顶,并重新调整后HA =7235641(3) 第二次取出堆顶,并重新调整后HA =2341563. (1) 希尔排序 512 275 275* 061 增量为2 275* 061 512 275 增量为1 061 275* 275 512 (2) 直接选择排序 275 275* 512 061 i = 1 061 275* 512 275 i = 2 061 275* 512 275 i = 3 061

16、275* 275 512 (3) 快速排序 512 275 275* 275* 275 512 (4) 堆排序 275 275* 061 170 已经是最大堆,交换275与170 170 275* 061 275 对前3个调整 275* 170 061 275 前3个最大堆,交换275*与061 061 170 275* 275 对前2个调整 170 061 275* 275 前2个最大堆,交换170与061 061 170 275* 275 4. 设初始归并段个数n = 12,外归并路数k = 4,计算(n-1) % (k-1) = 11 % 3 = 2 0,必须补k-2-1 = 1个长度为

17、0的空归并段,才能构造k路归并树。此时,归并树的内结点应有(n-1+1)/(k-1) = 12/3 = 4个。WPL = (3+6+8)*3+(9+18+20+30+44+60+62)*2+(68+85)*1 = 51+ 486+153 = 6905. 生成初始归并段的过程输入文件InFile内存工作区输出文件OutFile动作19, 22, 17, 16, 11, 10,12, 32, 26, 20, 28, 07输入5个排序码10, 12, 32, 26, 20, 28, 0719, 22, 17, 16, 11选择11, 输出11,门槛11, 置换1012, 32, 26, 20, 28

18、, 0719, 22, 17, 16, 1011选择16, 输出16,门槛16, 置换1232, 26, 20, 28, 0719, 22, 17, 12, 1011, 16选择17, 输出17,门槛17, 置换3226, 20, 28, 0719, 22, 32, 12, 1011, 16, 17选择19, 输出19,门槛19, 置换2620, 28, 0726, 22, 32, 12, 1011, 16, 17, 19选择22, 输出22,门槛22, 置换2028, 0726, 20, 32, 12, 1011, 16, 17, 19, 22选择26, 输出26,门槛26, 置换28072

19、8, 20, 32, 12, 1011, 16, 17, 19, 22, 26选择28, 输出28,门槛28, 置换0707, 20, 32, 12, 1011, 16, 17, 19, 22, 26, 28选择32, 输出32,门槛32, 无输入07, 20, , 12, 1011, 16, 17, 19, 22, 26, 28,32无大于门槛的对象, 输出段结束符07, 20, , 12, 1011, 16, 17, 19, 22, 26, 28,32, 选择07, 输出07,门槛07, 无输入, 20, , 12, 1007选择10, 输出10,门槛10, 无输入, 20, , 12,

20、07, 10选择12, 输出12,门槛12, 无输入, 20, , , 07, 10, 12选择20, 输出20,门槛20, 无输入, , , , 07, 10, 12, 20无大于门槛的对象, 输出段结束符07, 10, 12, 20, 结束6. 生成初始归并段的过程输入文件InFile内存工作区储备库输出文件OutFile动作19, 22, 17, 16, 11,10,12, 32, 26, 20,28, 07输入5个排序码10, 12, 32, 26, 20, 28,0719, 22, 17,16, 1111选择11, 输出11,门槛11, 暂存1012, 32, 26, 20, 28,

21、 0719, 22, 17,16, 1011选择16, 输出16,门槛16, 暂存1232, 26, 20, 28, 0719, 22, 17, 10, 1211, 16选择17, 输出17,门槛17, 置换3226, 20, 28, 0719, 22, 32, 10, 1211, 16, 17选择19, 输出19,门槛19, 置换2620, 28, 0726, 22, 32, 10, 1211, 16, 17, 19选择22, 输出22,门槛22, 暂存2028, 0726, , 32, 10, 12, 2011, 16, 17, 19, 22选择26, 输出26,门槛26, 置换28072

22、8, , 32, 10, 12, 2011, 16, 17, 19, 22,26选择28, 输出28,门槛28, 暂存07, , 32, 10, 12, 20,0711, 16, 17, 19, 22,26, 28选择32, 输出32,门槛32, 无输入, , , 10, 12, 20,0711, 16, 17, 19, 22,26, 28, 32无大于门槛的对象,输出段结束符将暂存区内容传送到内存工作区10, 12, 20,07, 11, 16, 17, 19, 22,26, 28, 32, 选择07, 输出07,门槛07, 无输入10, 12, 20, 07选择10, 输出10,门槛10,

23、 无输入, 12, 20, 07, 10选择12, 输出12,门槛12, 无输入, , 20, 07, 10, 12选择20, 输出20,门槛20, 无输入, , , 07, 10, 12, 20无大于门槛的对象,输出段结束符07, 10, 12, 20, 结束7. (1) 文件有4500个记录,计算机中用于排序的内存区可容纳450个记录,可建立的初始归并段有4500450 = 10个。每个初始归并段中有450个记录,存于45075 = 6个页块中。(2) 内存区可容纳6个页块,可建立6个缓冲区,其中5个缓冲区用于输入,1个缓冲区用于输出,因此,可采用5路归并。归并过程如下:共做了2趟归并,每

24、趟需要读60个磁盘页块,写出60个磁盘页块。8. (1) 设归并路数为k,初始归并段个数m = 80,根据归并趟数计算公式S = logkm = logk80 = 3得:k380。由此解得k5,即应取的归并路数至少为5。(2) 设多路归并的归并路数为k,需要k个输入缓冲区和1个输出缓冲区。1个缓冲区对应1个文件,有k +1 = 15,因此k = 14,可做14路归并。由S = logkm = log1480 = 2。即至少需2趟归并可完成排序。若限定这个趟数,由S = logk80 = 2,有80k2,可取的最低路数为9。即要在2趟内完成排序,进行9路排序即可。五、 算法分析题1. 给出下面m

25、ain () 函数的执行结果:/-/ Sorry, no comments available:/ Try to read & understand following lines by yourself/-#include void Exchange ( int s , int i, int j ) int temp = si; si = sj; sj = temp;int Partition ( int seq , int low, int high ) int pivotpos = low; int pivot = seqlow; for ( int i = low+1; i = hig

26、h; i+ ) if ( seqi pivot ) pivotpos+; if ( pivotpos != i ) Exchange ( seq, pivotpos, i); Exchange ( seq, low, pivotpos ); for ( i = 0; i low; i+ ) printf ( t ); for ( i = low; i pivotpos; i+ ) printf ( t%d, seqi ); printf ( t%d, seqpivotpos ); for ( i = pivotpos+1; i = high; i+ ) printf ( t%d, seqi )

27、; printf ( n ); return pivotpos;void main ( ) int testSeq12 = 57, 37, 17, 42, 61, 27, 84, 06, 19, 59, 93, 23 ; Partition ( testSeq, 0, 11); Partition ( testSeq, 0, 6); Partition ( testSeq, 8, 11);2. 本题给出一个施加于链表的选择排序的算法。算法中用到一个临时的表头结点 head,作为结果链表的表头结点,每次从first链上摘下值最大的结点current链入 head之后。算法结束前,将 head删除。 template void LinkList : ListSelectSort ( ) LinkNode * head = new ListNode, * current, * pre, * p, * q; int i = 0; while ( ) p = current = first; q = NULL; wh

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

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