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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文([考研类试卷]计算机专业基础综合数据结构(排序)历年真题试卷汇编9及答案与解析.doc)为本站会员(terrorscript155)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

[考研类试卷]计算机专业基础综合数据结构(排序)历年真题试卷汇编9及答案与解析.doc

1、计算机专业基础综合数据结构(排序)历年真题试卷汇编 9 及答案与解析一、综合题1 如果只要找出一个具有 n 个元素的集合的第 k(1kn)个最小元素,你所学过的排序方法中哪种最适合? 给出实现的思想。 【北方交通大学 1998 六(10 分)】2 设结点个数为 n,请问采用堆排序法进行排序,其时间复杂性是多少?请以大 O形式给出,并给出证明。【上海交通大学 2004 四(10 分)】2 已知待排序的序列为(503,87,512,6l,908, 170,897,275,653,462),试完成下列各题。3 根据以上序列建立一个堆(画出第一步和最后堆的结果图),希望先输出最小值。4 输出最小值后,

2、如何得到次小值(并画出相应结果图)。【同济大学 2001 二(10 分)】4 试将关键字序列(56,塾,55,67,46,58,18,88)5 调整成一个初始大顶堆,用二叉树形式说明调整过程;6 简要说明如何从初始大顶堆开始进行排序。【华中科技大学 2007 四、24(10 分)】7 一组记录的关键字为(50,79,8,56,32,41,85),给出利用重建堆方法建立的初始堆(堆顶最大) ,并给出堆排序的过程。 【吉林大学 2007 二、5(4 分)】8 已知序列503,87,512 ,61,908,170,897,275,653,462)将其调整为堆(大堆顶,即 KiK2i,K iK2i+1

3、)。【中国海洋大学 2006 一、4(8 分)】9 给定关键字序列(20,18,9,86,72,12,27,40)。试将该序列建成小根堆。10 判断下面的每个结点序列是否表示一个堆,如果不是堆,请把它调整成堆。100,90, 80,60,85 ,75,20,25,10,70, 65,50 100,70,50,20,90,75,60,25,10,85,65,80【复旦大学 1997 二(8 分)】11 全国有 10000 人参加物理竞赛,只录取成绩优异的前 10 名,并将他们从高分到低分输出。而对落选的其他考生,不需排出名次,问此种情况下,用何种排序方法速度最快?为什么 ?【北京邮电大学 199

4、6 一、3(4 分)】12 设有 n 个无序元素,按非递减次序排序,但只想得到前面长度为 k 的部分序列,其中 nk,最好采用什么排序方法? 为什么?如果有这样一个序列59,11 ,26 ,34,17,91 ,25),得到的部分序列是 11,17,25),对于该例使用所选择的方法实现时,共执行多少次比较?【东北大学 2002 一、4(3 分)】13 写出用堆排序算法对文件 F=(12,3,15,30,9,28)进行排序时,初始堆及以后每挑好一个元素重新调整后堆的状态,并指出这里的堆和败者树的一个主要区别。【东南大学 1998 二(8 分)】13 请回答下列关于堆(Heap)的一些问题。【清华大

5、学 2000 五(12 分)】14 堆的存储表示是顺序的,还是链接的?15 设有一个最小堆,即堆中任意结点的关键字均大于它的左子女和右子女的关键字。其具有最大值的元素可能在什么地方?16 对,1 个元素进行初始建堆的过程中,最多做多少次数据比较(不用大 0 表示法)?二、设计题17 设有一个数组中存放了一个无序的关键序列 K1、K 2、K n。现要求将 Kn 放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过 n。(注:用程序实现。)【南京航空航天大学 1997 六(12 分)】18 借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于 key的记录。

6、设此组记录存放于数组 r1h中。若查找成功,则输出该记录在 r 数组中的位置及其值,否则显示“not find” 信息。请编写出算法并简要说明算法思想。【北京邮电大学 1998 七(1 5 分)】19 编写非递归的快速排序算法。【中科院软件所 1997 三(10 分)】20 设有顺序放置的 n 个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红、白、蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后。重新安排时,对每粒砾石的颜色只能查看一次,并且只允许交换操作来调整砾石的位置。【上海大学 1999 二、2(18 分)】21 编写算法解决荷兰国旗问题,即将仅由红、

7、白、蓝三种颜色的条块序列,在O(n)时间内按红、白、蓝顺序排好。例:给定色彩条块序列蓝、白、红、白、蓝、红、白、白、红、蓝)则要求的结果为:红、红、红、白、白、白、白、蓝、蓝、蓝【东华大学 2003 五(15 分)】【浙江大学 2003 七(10 分)】22 对给定关键字序号 j(1jn),要求在无序记录 A1n中找到关键字从小到大排在第 j 位上的记录,写一个算法利用快速排序的划分思想实现上述查找 (要求用最少的时间和最少的空间)。例如:给定无序关键字7,5,1,6,2,8,9,3),当 j=4 时,找到的关键字应是 5。【中科院研究生院 2003 十二(15 分)】【武汉理工大学 2002

8、 四、3(353 分)】23 若待排序列用单链表存储,试给出其快速排序算法。【北京邮电大学 2000 七(15 分)】24 已知关键字序列(K 1,K2,K3,,K n-1)是大根堆。(1)试写出一算法将(K1,K2,K3,,K n-1,K n)调整为大根堆;(2)利用(1)的算法写一个建大根堆的算法。【中科院软件所 1999 七、2(7 分)】25 已知由 n 一 1 个关键字组成的序列(K 1,K2,K3Kn-1)是大顶堆,现在再增加一个关键字 Kn,要求将关键字序列(K 1,K2,K3,,K n-1,K n)重新调整为大顶堆。请完成以下要求: (1)编写满足上述要求的算法。 (2) 简述

9、你所编写的算法的基本思想。 (3)分析你所编写的算法的时间复杂度。 【南京航空航天大学 2006 7(5 分)】【江苏大学 2006 四、1(12 分) 】26 试设计一个 Heaplnsert(r,key)算法,将关键字 key 插入到堆 R 中去,并保证插入后 R 仍是堆。并分析你的算法的时间复杂性。【哈尔滨工业大学 2005 五、1(15分)】27 有关堆排序:(1)给出堆的定义及其数据结构定义;(2)给出堆排序算法的基本思想,并以图例予以说明(要求不少于 6 个待排序元素);(3)用伪语言描述该算法;(4)给出算法在最坏情况下的时间复杂性分析。【中南大学 2005 五、1(20 分)】

10、28 设有一大批需实时处理的数据元素组成集合 S,实时处理开始后,每隔一极短的时间间隔便收到一个新的数据元素加入 S。现要求在每次接收一个新元素之前,找出 S 中现有的最小元素并将其输出(从 S 中删除)。试选择或构造一种适当的数据结构并设计一个算法,尽可能高效地完成上述任务(只要求用文字说明算法的基本设计思想)。【同济大学 2005 三、1(7 分)】【中国海洋大学 2004 七(20 分)】计算机专业基础综合数据结构(排序)历年真题试卷汇编 9 答案与解析一、综合题1 【正确答案】 在具有 n 个元素的集合中找第 k(1kn)个最小元素,应使用快速排序方法。其基本思想如下:设 n 个元素的

11、集合用一维数组表示,其第一个元素的下标为 1,最后一个元素的下标为 n。以第一个元素为“枢轴” ,经过快速排序的一次划分,找到“ 枢轴” 的位置 i,若 i=k,则该位置的元素即:为所求;若 ik,则在 1 至 i 一 1 间继续进行快速排序的划分;若 i58,46,55,18,56,因篇幅所限,建堆过程略。6 【正确答案】 堆排序过程。待排序元素在一维数组中,建成堆后,堆顶元素(下标 0)和最后一个元素( 下标 n 一 1,本例下标 7)交换。这时最后一个元素(本例 88)到位,不再参与以后的调堆。从堆顶调堆至堆底(下标 n 一 2),又建成大顶堆。再将堆顶元素和最后一个元素(下标 n 一

12、2)交换,得到次大元素 67。如此下去,直至堆中只剩一个元素,得到元素的升序序列。7 【正确答案】 结果的大根堆为:85,79,50,56,32,41,8。建堆过程可以描述如下。首先按序列顺序画 n(待排序元素个数)个结点的完全二叉树。定义叶子结点已经是堆。从最后一个分支结点(下标 n21,第 1 个元素下标 0)开始调堆,直至最后将第 1 个元素调整到符合堆的定义。结合本例说明如下:叶子56,32,41 和 85 已经是堆,最后一个分支结点元素 8 不符合堆的定义,将 85 与8 交换。元素 79 符合堆的定义,不需调整。元素 50 不符合堆的定义,沿元素大的右分支向下筛选(因为建大根堆),

13、将 85 调到堆顶。将 50 放在原 85 的位置已满足堆的定义,否则还要继续向下筛选,直至满足堆的定义找到 50 的位置。8 【正确答案】 结果的大堆为:908,653,897,503,462,170,512,275,61,879 【正确答案】 小根堆为:9,1 8,12,40,72,20,27,8610 【正确答案】 是堆 不是堆,调成大堆100,90,80,25,85,75,60,20,10,70,65,5011 【正确答案】 在内部排序方法中,一趟排序后只有简单选择排序和冒泡排序可以选出一个最大(或最小) 元素,并加入已有的有序子序列中,但要比较 n 一 1 次。选次大元素要再比较 n

14、 一 2 次,其时间复杂度是 O(n2)。从 10 000 个元素中选 10个元素不能使用这种方法。而插入排序及希尔排序、快速排序、归并排序、基数排序等时间性能好的排序,都要等到最后才能确定各元素位置。只有堆排序,在未结束全部排序前,可以有部分排序结果。建立堆后,堆顶元素就是最大(或最小,视大堆或小堆而定)元素,然后,调堆又选出次大(小)元素。凡要求在 n 个元素中选出k(k2)个最大(或最小)元素,一般均使用堆排序。因为堆排序建堆比较次数至多不超过 4n,对深度为 k 的堆,在调堆算法中进行的关键字的比较次数至多为 2(k-1)次,且辅助空间为 O(1)。因快速排序会出现最差情况,时间复杂度

15、为 O(n2),所以,这里不采用快速排序。12 【正确答案】 从序列59,11,26,34,17,91,25 得到11,17,25共用 14次比较。其中建堆输出 11 比较了 8 次,调堆输出 1 7 和 25 各需要比较 4 次和 2 次:上面已经说明,堆排序适合数据量较大的情况,题中 7 个数据反映不出堆排序的优越性。13 【正确答案】 对具体例子的手工堆排序略。堆与败者树的区别:堆是 n 个元素的序列,在向量中存储,具有如下性质:由于堆的这个性质中下标 i 和2i、2i+1 的关系,恰好和完全二叉树中第 i 个结点和其子树结点的序号间的关系一致,所以堆可以看作是 n 个结点的完全二叉树。

16、而败者树是由参加比赛的 n 个元素作叶子结点而得到的完全二叉树。每个非叶(双亲)结点中存放的是两个子结点中的败者数据,而让胜者去参加更高一级的比赛。另外,还需增加一个结点,即结点0,存放比赛的全局获胜者。14 【正确答案】 堆的存储是顺序的。15 【正确答案】 最大值元素一定是叶子结点,可以在n2+1n 间的任何位置上。说明:原题“ 设有一个最小堆,即堆中任意结点的关键码均大于 它的左子女和右子女的关键码。其具有最大值的元素可能在什么地方”的叙述有误,应将“ 大于”改为“小于”。最大值元素一定是叶子结点。16 【正确答案】 在建含有 n 个元素、深度为 h 的堆时,其比较次数不超过 4n,推导

17、如下:由于第 i 层上的结点数至多是 2r-1,以它为根的二叉树的深度为 h 一 i+1,则调用n 2次筛选算法时总共进行的关键字比较次数不超过下式之值:二、设计题17 【正确答案】 以 Kn 为枢轴的一趟快速排序。暂存 Kn,先 i(初值 1)从前向后,再 i(初值 n1)从后向前地和枢轴 Kn 比较,寻找 Kn 的最终位置。请参见第 17 题。18 【正确答案】 可把待查记录看作枢轴,先由后向前依次比较,若小于枢轴,则从前向后,直到查找成功 返回其位置或失败返回 0 为止。19 【正确答案】 快速排序的非递归算法的核心语句段如下:typedef structint low,high;)no

18、denode sn+1;int quickpass(rectype r,int,int); 函数声明int top=1; stoplow=1; stophigh=n; top 是栈顶指针while(top0)(ss=stoplow;tt=stophigh;top 一一;if(ssI)s+toplow=SSj stophigh=k 一 1; 枢轴左边进栈if(ttk1)s+toplow=k+1; stophigh=tt ; 枢轴右边进栈20 【正确答案】 一趟快速排序可以将序列划分成两部分,这里要求一趟排序将序列分成三部分。设 3 个指针 i、j 和 k,将 r1j 一 1作为红色,r,k-1为

19、白色,rk.n为蓝色。为方便处理,将三种砾石的颜色用整数 1、2 和 3 表示。核心语句段如下:int i=1,j=1,k=n,temp;while(jnext; p 为工作指针while(flag) 进行一趟快速排序, flag 是结束排序的标志,初值为 0if(p 一datadata) 结点插入前一半endl 一next=p-next; 保留后继结点if(p:=end)flag=0; 一趟快速排序结束if(start=end1)end0=p; end0 是遍历遇到的第一个小于枢轴的结点,将为前半的尾结点pnext=start; start=p ; 修改左半部链表头指针p=end1 一nex

20、t; 恢复当前待处理结点else 处理右半部链表if(p=end)flag=0; 已到链表尾endl 一next=p ;endlip; endl 和 P 是前驱和后继关系p=p 一next; else whileLinkQuickSort(start,end0); 对枢轴元素最终位置前的单链表快速排序LinkQuicksort(start1 一next,end1) ; 对枢轴元素最终位置后的单链表快速排序24 【正确答案】 (1)因为前 n 一 1 个元素已经是堆,所以从第 n 个记录开始依次与其双亲(n 2)比较,若大于双亲则交换,继而与其双亲的双亲比较,直至满足堆的定义(最多类推到根) 。

21、核心语句段如下:j=n; R0=Rj;for(i=n2;i=1ji=i12)if(R0keyRikey)Rj=Ri; j=i;else break;Rj=R0;(2)void HeapBuilder(RecType R,int n)for(i=2;i=1ji=i12)if(R0keyRikey)Rj=Ri; j=i;else break;Rj=R0;(2)void HeapBuilder(RecType R,int n)for(i=2;i=1ji=i12)if(R0keyRikey)Rj=Ri; j=i;else break;Rj=R0;(2)void HeapBuilder(RecType R,int n)for(i=2;i0;i-) Sift(R,i,n);for(i=n; i1; i 一一)(R1Ri;Sift(R, 1,i 一 1);)for HeapSort28 【正确答案】 这是堆排序问题,先将集合 S 中的元素建成小堆,并输出堆顶最小元素。再将每隔一极短的时间间隔收到的新数据元素放到堆顶,进行调堆,再输出堆顶元素,如此反复进行。请参考上面第 34 题堆排序算法。

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1