




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页,共47页,2023年,2月20日,星期六排序:设n
个记录的序列为{R1,R2,R3,...,Rn}其相应的关键字序列为{K1,K2,K3,...,Kn}若规定1,2,3,...,n的一个排列p1,p2,p3,...,pn
,使得相应的关键字满足如下非递减关系:Kp≤Kp≤Kp≤...≤Kp123n则原序列变为一个按关键字有序的序列:Rp,Rp,Rp,...,Rp123n{}此操作过程称为排序。第2页,共47页,2023年,2月20日,星期六稳定排序与不稳定排序假设Ki=Kj
,且排序前序列中Ri
领先于Rj
;若在排序后的序列中Ri
仍领先于Rj
,则称排序方法是稳定的。若在排序后的序列中Rj
仍领先于Ri
,则称排序方法是不稳定的。例,序列3158
869若排序后得368
8915稳定的若排序后得368
8915不稳定的第3页,共47页,2023年,2月20日,星期六内部排序与外部排序内部排序:
指的是待排序记录存放在计算机随机存储器中进行的排序过程。外部排序:
指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。第4页,共47页,2023年,2月20日,星期六内部排序按照排序过程中所依据的原则的不同可以分类为:插入排序交换排序(快速排序)选择排序归并排序基数排序二叉排序树排序第5页,共47页,2023年,2月20日,星期六10.2插入排序10.2.1直接插入排序思想:利用有序表的插入操作进行排序有序表的插入:
将一个记录插入到已排好序的有序表中,从而得到一个新的有序表。例,序列132738657697插入4913273849
657697第6页,共47页,2023年,2月20日,星期六例,序列49386597761327初始,S={49};{3849}算法描述:初始,令第1
个元素作为初始有序表;依次插入第
2,3,…,k
个元素构造新的有序表;直至最后一个元素;{384965}{38496597}{3849657697}{133849657697}{13273849657697}直接插入排序算法主要应用比较和移动两种操作。第7页,共47页,2023年,2月20日,星期六10.2.2希尔(shell)排序分析直接插入排序1.若待排序记录序列按关键字基本有序,则排序效率可大大提高;2.待排序记录总数越少,排序效率越高;第8页,共47页,2023年,2月20日,星期六思想:先将待排序记录序列分割成为若干子序列分别进行直接插入排序;待整个序列中的记录基本有序后,再全体进行一次直接插入排序。例,序列493865977613274855419第一趟排序491319382765489755764131949273848655597476第9页,共47页,2023年,2月20日,星期六第二趟排序13194927384865559747613553876274
654948199713385576427
4965194897第三趟排序4131927
38
4849
556576
97第10页,共47页,2023年,2月20日,星期六10.3交换排序10.3.1冒泡排序思想:
通过不断比较相邻元素大小,进行交换来实现排序。首先将第一个元素与第二个元素比较大小,若为逆序,则交换;然后比较第二个元素与第三个元素的大小,若为逆序,则交换;...直至比较第n-1个元素与第n个元素的大小,若为逆序,则交换;第一趟排序:结果:关键字最大的记录被交换至最后一个元素位置上。第11页,共47页,2023年,2月20日,星期六例,序列4938761327493876132738
49
13
27384913762776初始第一趟排序后最大值13
492749次大值第二趟排序后3813
27132713382738第三趟排序后第四趟排序后第12页,共47页,2023年,2月20日,星期六10.3.2快速排序冒泡排序的一种改进算法。思想:以首记录作为轴记录,从前、后双向扫描序列,通过交换,实现大值记录后移,小值记录前移,最终将轴记录安置在一个适当的位置。(小值记录在前、大值记录在后)轴记录将原序列分割成两部分,依次对前后两部分重新设定轴记录,继而分别再进行快速排序。直至整个序列有序。第13页,共47页,2023年,2月20日,星期六例,序列{4938659776132752}第一趟排序4938659776132752ij从前寻找大于轴记录的记录,从后寻找小于轴记录的记录;ij交换大值记录与小值记录;2765重复上述两步操作,直至i>j
;ji1397ji交换轴记录和标识j
指示的记录。13
49第14页,共47页,2023年,2月20日,星期六第一趟排序后133827
49
76976552第二趟排序1338277697655249将序列分成两部分,分别进行新的快速排序;第二趟排序后13382765
527697第三趟排序38276552第三趟排序后27385265最终有序序列为:13273852657697第15页,共47页,2023年,2月20日,星期六10.4选择排序思想:
每一趟都选出一个最大或最小的元素,并放在合适的位置。简单选择排序树形选择排序堆排序第16页,共47页,2023年,2月20日,星期六10.4.1简单选择排序思想:第1趟选择:从1—n
个记录中选择关键字最小的记录,并和第1个记录交换。第2趟选择:从2—n
个记录中选择关键字最小的记录,并和第2
个记录交换。第n-1趟选择:从n-1—n
个记录中选择关键字最小的记录,并和第n-1
个记录交换。...第17页,共47页,2023年,2月20日,星期六例,序列4938976576第1趟选择:min3849976576第2趟选择:min38
49976576第3趟选择:min38
49
659776第4趟选择:min38
49
65
7697第18页,共47页,2023年,2月20日,星期六选择排序的主要操作是进行关键字间的比较。在n个关键字中选出最小值,至少需要n-1次比较。在剩余的n-1个关键字中选出最小值,至少需要n-2次比较?如果能利用前n-1次比较所得信息,可以减少后面选择的比较次数。体育比赛中的锦标赛:第19页,共47页,2023年,2月20日,星期六10.4.3堆排序堆:
一棵完全二叉树,任一个非终端结点的值均小于等于(或大于等于)其左、右儿子结点的值。例,1285473053362491963811
98324根结点为最小值根结点为最大值第20页,共47页,2023年,2月20日,星期六2.把这棵普通的完全二叉树改造成堆,便可获取最小值;思想:3.输出最小值;4.删除根结点,继续改造剩余树成堆,便可获取次小值;5.输出次小值;6.重复改造,输出次次小值、次次次小值,直至所有结点均输出,便得到一个排序。1.将序列构造成一棵完全二叉树;第21页,共47页,2023年,2月20日,星期六最大堆的初始化根据inta[10]={20,12,35,15,10,80,30,17,2,1}建立最大堆20123515108030172112345678910算法:从第一个具有孩子的结点i开始(i=[n/2]),如果以这个元素为根的子树已是最大堆,则不需调整,否则需调整子树使之成为堆。继续检查i-1,i-2等结点为根的子树,直到检查整个二叉树的根结点(其位置为1)。第22页,共47页,2023年,2月20日,星期六最大堆的初始化step1已知n=10;i=n/2=5;20123515108030172112345678910i2012351510803017210123456789第23页,共47页,2023年,2月20日,星期六最大堆的初始化step2i=4201235151080301721123456789102012351510803017210123456789i2i2i+1第24页,共47页,2023年,2月20日,星期六最大堆的初始化step3i=3201235171080301521123456789102012351710803015210123456789i2i2i+1第25页,共47页,2023年,2月20日,星期六最大堆的初始化step4_0i=2201280171035301521123456789102012801710353015210123456789i2i2i+1第26页,共47页,2023年,2月20日,星期六最大堆的初始化step4_1i=2,j=2i=4201780121035301521123456789102017801210353015210123456789j2j2j+1第27页,共47页,2023年,2月20日,星期六最大堆的初始化step5_0i=5201780151035301221123456789102017801510353012210123456789i2i2i+1第28页,共47页,2023年,2月20日,星期六最大堆的初始化step5_1i=1,j=2i+1=3801720151035301221123456789108017201510353012210123456789j2j2j+1第29页,共47页,2023年,2月20日,星期六最大堆的初始化step5_2801735151020301221123456789108017351510203012210123456789第30页,共47页,2023年,2月20日,星期六例,序列49386597761327501.按顺序依次构造成完全二叉树的结点;49386597761327502.把完全二叉树改造成堆;从下向上,父子交换;50971365134949273.取得最小值134.删除13
,重新改造成新堆;1397279797495.取得次小值27;6.删除27
,重新改造成新堆;9727973897507.取得次次小值38;第31页,共47页,2023年,2月20日,星期六10.5归并排序归并:
将两个或两个以上的有序表合并成一个新的有序表。有序线性表、有序链表的归并;利用归并的思想实现排序:初始,n个记录看作是n
个有序的子序列,长度为
1
;两两归并,得到n/2
个长度为2或1
的有序的子序列;再两两归并;重复执行直至得到一个长度为n
的有序序列为止。这种排序方法称为2—路归并排序。第32页,共47页,2023年,2月20日,星期六例,序列{49,38,65,97,76,13,27}初始[49]
[38][65][97][76][13][27]一趟归并[3849][6597][1376][27]二趟归并[38496597][132776]三趟归并[13273849657697]第33页,共47页,2023年,2月20日,星期六10.6基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。10.6.1多关键字排序扑克牌问题:已知扑克牌中52张牌面的次序关系定义为:♣
<
♦
<
♥
<
♠花色:面值:2<3<<A...例,♦8
♠
3<花色优先级更高,为主关键字,面值为次关键字第34页,共47页,2023年,2月20日,星期六52张牌排序方法:最高位优先法(MSDF):先按不同“花色”分成有次序的4堆,每一堆均具有相同的花色;然后分别对每一堆按“面值”大小整理有序。最低位优先法(LSDF):先按不同“面值”分成13堆;然后将这13堆牌自小至大叠在一起(2,3,...,A);然后将这付牌整个颠倒过来再重新按不同的“花色”分成4堆;最后将这4堆牌按自小至大的次序合在一起。收集分配第35页,共47页,2023年,2月20日,星期六10.6.2基数排序基数排序就是借助于“分配”和“收集”两种操作实现对单逻辑关键字的排序。首先,单逻辑关键字通常都可以看作是由若干关键字复合而成。其次,利用LSDF法实现对若干关键字的排序。例,若关键字是数值,且值域为0≤K≤999,故可以将K
看作是由3个关键字K0K1K2
组成,例,603是由603
组成。第36页,共47页,2023年,2月20日,星期六例,序列278109063930589184505269008083第一趟分配0123456789278109063930589184505269008083第一趟收集930063083184505278008109589269第二趟分配0123456789930063083184505278008109589269第二趟收集505008109930063269278083184589第37页,共47页,2023年,2月20日,星期六第二趟收集505008109930063269278083184589第三趟分配0123456789505008109930063269278083184589第三趟收集008063083109184269278505589930第38页,共47页,2023年,2月20日,星期六一个对象序列的排序码为{46,79,56,38,40,84},采用快速排序以位于最左位置的对象为基准而得到的第一次划分结果为()。
A.{38,46,79,56,40,84}B.{38,79,56,46,40,84}C.{40,38,46,56,79,84}D.{38,46,56,79,40,84}
第39页,共47页,2023年,2月20日,星期六设有5000个无序的元素,希望用最快的速度挑选出其中前50个最大的元素,最好选用(
)法。
A.冒泡排序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 雪中的温情抒情作文7篇
- 心理学人格与社会行为分析试题集
- 消防风机系统工程分包协议
- 专业服务费支付流程协议
- 健康饮食与校园食品安全教育的实施路径
- 医学微生物学与免疫学基础测试卷
- 灯具插座采购协议
- 全球软件市场增长率和市场规模统计表
- 智能家电技术开发合作协议
- 健康产业知识问答系列
- 2025年教师招聘考试教育综合知识复习资料
- 2024版压力容器设计审核机考题库(综合题)
- 2024中原绿色产业生态发展(河南)有限公司公开招聘80人笔试参考题库附带答案详解
- 电热水器使用安全协议书
- 《全断面岩石掘进机法水工隧洞工程技术规范(SLT 839-2025)》知识培训
- 广东省广州市越秀区2024-2025学年小升初考试数学试卷含解析
- 《食品包装纸》课件
- 人教版音乐六年级下册全册教学设计教案
- 2025山东菏泽事业单位招聘易考易错模拟试题(共500题)试卷后附参考答案
- 世界现代设计史(总结)
- 工地试验室安全培训内容
评论
0/150
提交评论