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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

第8章排序.docx

1、第8章 排序第8章 排序1选择题(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为( )。A归并排序 B冒泡排序 C插入排序 D选择排序 答案:C(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为( )。A归并排序 B冒泡排序 C插入排序 D选择排序 答案:D(3)对n个不同的关键字由小到大进行冒泡排序,在下列( )情况下比较的次数最多。A从小到大排列好的 B从大到小排列好的 C元素无序 D元素基本有序答案:B解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。(4)对n个不同的排序码进行冒

2、泡排序,在元素无序的情况下比较的次数最多为( )。An+1 Bn Cn-1 Dn(n1)/2答案:D解释:比较次数最多时,第一次比较n-1次,第二次比较n2次最后一次比较1次,即(n1)+(n2)+1= n(n1)/2。(5)快速排序在下列( )情况下最易发挥其长处.A被排序的数据中含有多个相同排序码 B被排序的数据已基本有序 C被排序的数据完全无序 D被排序的数据中的最大值和最小值相差悬殊答案:C解释:B选项是快速排序的最坏情况。(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是( )。AO(n) BO(n2) CO(nlog2n) DO(n3) 答案:B解释:快速排序的平均时间

3、复杂度为O(nlog2n),但在最坏情况下,即关键字基本排好序的情况下,时间复杂度为O(n2)。(7)若一组记录的排序码为(46, 79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为( )。A38,40,46,56,79,84 B40,38,46,79,56,84C40,38,46,56,79,84 D40,38,46,84,56,79答案:C(8)下列关键字序列中,( )是堆。A16,72,31,23,94,53 B94,23,31,72,16,53 C16,53,23,94,31,72 D16,23,53,31,94,72答案:D解释:D选项为小根

4、堆(9)堆是一种( )排序。A插入 B选择 C交换 D归并答案:B(10)堆的形状是一棵( )。A二叉排序树 B满二叉树 C完全二叉树 D平衡二叉树答案:C(11)若一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为( )。A79,46,56,38,40,84 B84,79,56,38,40,46 C84,79,56,46,40,38 D84,56,79,40,46,38答案:B(12)下述几种排序方法中,要求内存最大的是( ).A希尔排序 B快速排序 C归并排序 D堆排序答案:C解释:堆排序、希尔排序的空间复杂度为O(1),快速排序的空间复杂度为O(l

5、og2n),归并排序的空间复杂度为O(n).(13)下述几种排序方法中,( )是稳定的排序方法。A希尔排序 B快速排序 C归并排序 D堆排序答案:C解释:不稳定排序有希尔排序、简单选择排序、快速排序、堆排序;稳定排序有直接插入排序、折半插入排序、冒泡排序、归并排序、基数排序。(14)数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间。A冒泡排序 B快速排序 C简单选择排序 D堆排序答案:D(15)下列排序算法中,( )不能保证每趟排序至少能将一个元素放到其最终的位置上。A希尔排序 B快速排序 C冒泡排序 D堆排序答案:A解释:快速排序的每趟排序能将作为枢

6、轴的元素放到最终位置;冒泡排序的每趟排序能将最大或最小的元素放到最终位置;堆排序的每趟排序能将最大或最小的元素放到最终位置.2应用题(1)设待排序的关键字序列为12,2,16,30,28,10,16,20,6,18,试分别写出使用以下排序方法,每趟排序结束后关键字序列的状态。直接插入排序 折半插入排序希尔排序(增量选取5,3,1)冒泡排序快速排序简单选择排序堆排序二路归并排序答案:直接插入排序2 12 16 30 28 10 16* 20 6 18 2 12 16 30 28 10 16 20 6 18 2 12 16 30 28 10 16* 20 6 18 2 12 16 28 30 10

7、 16* 20 6 18 2 10 12 16 28 30 16 20 6 18 2 10 12 16 16 28 30 20 6 18 2 10 12 16 16* 20 28 30 6 18 2 6 10 12 16 16 20 28 30 18 2 6 10 12 16 16 18 20 28 30 折半插入排序 排序过程同希尔排序(增量选取5,3,1)10 2 16 6 18 12 16* 20 30 28 (增量选取5)6 2 12 10 18 16 16 20 30 28 (增量选取3)2 6 10 12 16 16 18 20 28 30 (增量选取1)冒泡排序2 12 16 2

8、8 10 16* 20 6 18 30 2 12 16 10 16* 20 6 18 28 30 2 12 10 16 16 6 18 20 28 30 2 10 12 16 6 16 18 20 28 30 2 10 12 6 16 16 18 20 28 30 2 10 6 12 16 16 18 20 28 30 2 6 10 12 16 16* 18 20 28 302 6 10 12 16 16 18 20 28 30 快速排序12 6 2 10 12 28 30 16 20 16 18 6 2 6 10 12 28 30 16* 20 16 18 28 2 6 10 12 18 1

9、6 16* 20 28 30 18 2 6 10 12 16 16 18 20 28 30 16* 2 6 10 12 16 16 18 20 28 30左子序列递归深度为1,右子序列递归深度为3简单选择排序2 12 16 30 28 10 16* 20 6 18 2 6 16 30 28 10 16 20 12 18 2 6 10 30 28 16 16 20 12 18 2 6 10 12 28 16 16 20 30 18 2 6 10 12 16 28 16* 20 30 18 2 6 10 12 16 16* 28 20 30 18 2 6 10 12 16 16* 18 20 30

10、 28 2 6 10 12 16 16 18 20 28 30 2 6 10 12 16 16* 18 20 28 30二路归并排序2 12 16 30 10 28 16 * 20 6 18 2 12 16 30 10 16* 20 28 6 18 2 10 12 16 16 20 28 30 6 18 2 6 10 12 16 16* 18 20 28 30(2)给出如下关键字序列321,156,57,46,28,7,331,33,34,63,试按链式基数排序方法,列出每一趟分配和收集的过程.答案:按最低位优先法 3211565746287331333463 分配 0 1 2 3 4 5 6

11、 7 8 9 321 33 34 156 57 28 331 63 46 7收集 3213313363341564657728(3)对输入文件(101,51,19,61,3,71,31,17,19,100,55,20,9,30,50,6,90);当k=6时,使用置换选择算法,写出建立的初始败者树及生成的初始归并段。答案:初始败者树 初始归并段:R1:3,19,31,51,61,71,100,101 R2:9,17,19,20,30,50,55,90 R3:63算法设计题(1)试以单链表为存储结构,实现简单选择排序算法. 算法描述:void LinkedListSelectSort(Linked

12、List head)/本算法一趟找出一个关键字最小的结点,其数据和当前结点进行交换;若要交换指针,则须记下/当前结点和最小结点的前驱指针p=headnext; while(p!=null) q=pnext; r=p; /设r是指向关键字最小的结点的指针 while (q!=null) if(q-datardata) r=q; q:=q-next; if(r!=p) rdata-p-data; p=p-next; (2)有n个记录存储在带头结点的双向链表中,现用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法.(注:双向冒泡排序即相邻两趟排序向相反方向冒泡). 算法描述:typedef

13、struct node ElemType data; struct node prior,*next; node,*DLinkedList;void TwoWayBubbleSort(DLinkedList la)/对存储在带头结点的双向链表la中的元素进行双向起泡排序。int exchange=1; / 设标记 DLinkedList p,temp,tail; head=la /双向链表头,算法过程中是向下起泡的开始结点 tail=null; /双向链表尾,算法过程中是向上起泡的开始结点while (exchange)p=headnext; /p是工作指针,指向当前结点exchange=0;

14、 /假定本趟无交换 while (p-next!=tail) / 向下(右)起泡,一趟有一最大元素沉底 if (pdatap-nextdata) /交换两结点指针,涉及6条链temp=pnext; exchange=1;/有交换p-next=tempnext;tempnext-prior=p /先将结点从链表上摘下tempnext=p; pprior-next=temp; /将temp插到p结点前temp-prior=pprior; p-prior=temp; else p=pnext; /无交换,指针后移 tail=p; /准备向上起泡 p=tail-prior;while (exchang

15、e pprior!=head) /向上(左)起泡,一趟有一最小元素冒出 if (pdatapprior-data) /交换两结点指针,涉及6条链temp=p-prior; exchange=1; /有交换pprior=temp-prior;temp-prior-next=p; /先将temp结点从链表上摘下tempprior=p; pnext-prior=temp; /将temp插到p结点后(右)tempnext=p-next; p-next=temp; else p=pprior; /无交换,指针前移 head=p; /准备向下起泡 / while (exchange) /算法结束 (3)设

16、有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。题目分析利用快速排序思想解决。由于要求“对每粒砾石的颜色只能看一次”,设3个指针i,j和k,分别指向红色、白色砾石的后一位置和待处理的当前元素。从k=n开始,从右向左搜索,若该元素是兰色,则元素不动,指针左移(即k1);若当前元素是红色砾石,分i=j(这时尚没有白色砾石)和ij两种情况。前一情况执行第i个元素和第k个元素交换,之后i+1;后一情况,i所指的元素已处理过(

17、白色),j所指的元素尚未处理,应先将i和j所指元素交换,再将i和k所指元素交换.对当前元素是白色砾石的情况,也可类似处理。为方便处理,将三种砾石的颜色用整数1、2和3表示。算法描述:void QkSort(rectype r,int n) / r为含有n个元素的线性表,元素是具有红、白和兰色的砾石,用顺序存储结构存储,/本算法对其排序,使所有红色砾石在前,白色居中,兰色在最后。int i=1,j=1,k=n,temp;while (k!=j)while (rk.key=3) k-;/ 当前元素是兰色砾石,指针左移 if (rk。key=1) / 当前元素是红色砾石 if (i=j)temp=r

18、k;rk=ri;ri=temp; i+;/左侧只有红色砾石,交换rk和ri else temp=rj;rj=ri;ri=temp; j+; /左侧已有红色和白色砾石,先交换白色砾石到位 temp=rk;rk=ri;ri=temp; i+;/白色砾石(i所指)和待定砾石(j所指) /再交换rk和ri,使红色砾石入位。if (rk.key=2) if (i=j) temp=rk;rk=rj;rj=temp; j+;/ 左侧已有白色砾石,交换rk和rj else temp=rk;rk=ri;ri=temp; j=i+1; /i、j分别指向红、白色砾石的后一位置 /while if (rk=2) j+

19、; / 处理最后一粒砾石 else if (rk=1) temp=rj;rj=ri;ri=temp; i+; j+; /最后红、白、兰色砾石的个数分别为: i-1;j-i;n-j+1 /结束QkSor算法算法讨论若将j(上面指向白色)看作工作指针,将r1。.j1作为红色,rj。.k-1为白色,rk。n为兰色。从j=1开始查看,若rj为白色,则j=j+1;若rj为红色,则交换rj与ri,且j=j+1,i=i+1;若rj为兰色,则交换rj与rk;k=k1.算法进行到jk为止。算法片段如下:int i=1,j=1,k=n;while(j=k) if (rj=1) /当前元素是红色 temp=ri;

20、ri=rj; rj=temp; i+;j+; else if (rj=2) j+; /当前元素是白色else /(rj=3 当前元素是兰色 temp=rj; rj=rk; rk=temp; k-; 对比两种算法,可以看出,正确选择变量(指针)的重要性。(4)编写算法,对n个关键字取整数值的记录序列进行整理,以使所有关键字为负值的记录排在关键字为非负值的记录之前,要求:采用顺序存储结构,至多使用一个记录的辅助存储空间; 算法的时间复杂度为O(n)。 算法描述void process (int An)low = 0;high = n1;while ( lowhigh )while (lowhigh

21、 & Alow0)low+;while (low0)high+;if (lowhigh) x=Alow;Alow=Ahigh;Ahigh=x;low+;high-; return;(5)借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组rl。n中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find信息.请简要说明算法思想并编写算法。题目分析把待查记录看作枢轴,先由后向前依次比较,若小于枢轴,则从前向后,直到查找成功返回其位置或失败返回0为止。算法描述int index (RecType R,int l,h,datatype

22、 key)int i=l,j=h; while (ij) while (ikey) j-; if (Rj.key=key) return j; while (i=j & Ri。keykey) i+; if (Ri。key=key) return i; cout“Not find”; return 0; /index(6)有一种简单的排序算法,叫做计数排序.这种排序算法对一个待排序的表进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键字比该记录的关键字小.假设针对某一个记录,统计

23、出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。 给出适用于计数排序的顺序表定义; 编写实现计数排序的算法; 对于有n个记录的表,关键字比较次数是多少? 与简单选择排序相比较,这种方法是否更好?为什么?算法描述typedef structint key; datatype infoRecType void CountSort(RecType a,b,int n) /计数排序算法,将a中记录排序放入b中for(i=0;in;i+) /对每一个元素for(j=0,cnt=0;jn;j+)if(aj.keyai.key) cnt+; /统计关键字比它小的元素个数bcnt=ai;/

24、Count_Sort对于有n个记录的表,关键码比较n2次。简单选择排序算法比本算法好.简单选择排序比较次数是n(n1)/2,且只用一个交换记录的空间;而这种方法比较次数是n2,且需要另一数组空间。算法讨论因题目要求“针对表中的每个记录,扫描待排序的表一趟”,所以比较次数是n2次。若限制“对任意两个记录之间应该只进行一次比较”,则可把以上算法中的比较语句改为:for(i=0;in;i+) ai。count=0;/各元素再增加一个计数域,初始化为0for(i=0;in;i+) for(j=i+1;jn;j+) if(ai.keyaj。key) aj.count+; else ai。count+;

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

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