




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章排序,排序定义将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫排序。排序分类按待排序记录所在位置内排序:待排序记录存放在内存外排序:排序过程中需对外存进行访问的排序按排序依据原则插入排序:直接插入排序、二分法插入排序、希尔排序选择排序:直接选择排序、堆排序交换排序:冒泡排序、快速排序归并排序:2-路归并排序分配排序:基数排序,8.1基本概念,排序基本操作比较两个关键字大小将记录从一个位置移动到另一个位置稳定排序与非稳定排序评价排序算法代价的标准执行算法所需的时间;比较次数、移动次数执行算法所需要的附加空间;算法本身的复杂程度,在待排序的文件中,如果存在多个排序码相同的记录,经过排序后,相同排序码记录的相对次序如果保持不变,则称这种排序方法是稳定的,否则是不稳定的。,8.2插入排序直接插入排序排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序,算法描述voidinsertSort(SortObject*pvector),例,4938659776132749,i=138(3849)659776132749,i=265(384965)9776132749,i=397(38496597)76132749,i=476(3849657697)132749,i=513(133849657697)2749,(),i=6(133849657697)2749,27,97),76,65,49,38,27,i=749(13384949657697)27,算法评价时间复杂度若待排序记录按关键字从小到大排列(正序)关键字比较次数:Cmin=n-1n,记录移动次数:Mmin=n-1n,若待排序记录按关键字从大到小排列(逆序)关键字比较次数:Cmin=n(n-1)/2,记录移动次数:Mmin=n/2,若待排序记录是随机的,取平均值关键字比较次数:,记录移动次数:,T(n)=O(n),空间复杂度:S(n)=O(1),二分法插入排序排序过程:用折半查找方法确定插入位置,例,i=1(30)1370853942620,i=213(1330)70853942620,i=76(6133039427085)20,.,i=820(613203039427085),算法描述程序实现,算法评价时间复杂度:T(n)=O(n)空间复杂度:S(n)=O(1)算法中增加了一个辅助空间temp,希尔排序(缩小增量法)排序过程:先取一个正整数d1n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2r2.key,则交换;然后比较第二个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止第一趟冒泡排序,结果关键字最大的记录被安置在最后一个记录上对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第n-1个记录位置重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止,例,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,算法描述,算法评价时间复杂度最好情况(正序)比较次数:n-1移动次数:0最坏情况(逆序)比较次数:(n-1)+(n-2)+2+1=(n*n-n)/2,移动次数:3*(n-1)+(n-2)+2+1=3(n*n-n)/2,空间复杂度:S(n)=O(1),T(n)=O(n),快速排序基本思想:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序排序过程:对rst中记录进行一趟快速排序,附设两个指针i和j,设枢轴记录rp=rs,x=rp.key初始时令i=s,j=t首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp交换再从i所指位置起向后搜索,找到第一个关键字大于x的记录,和rp交换重复上述两步,直至i=j为止再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止,完成一趟排序:(273813)49(76976550),分别进行快速排序:(13)27(38)49(5065)76(97),快速排序结束:1327384950657697,49,27,49,65,13,49,49,97,算法描述,算法评价时间复杂度最好情况(每次总是选到中间值作枢轴)T(n)=O(nlog2n)最坏情况(每次总是选到最小或最大元素作枢轴)T(n)=O(n),空间复杂度:需栈空间以实现递归最坏情况:S(n)=O(n)一般情况:S(n)=O(log2n),T(n)=O(n),8.5基数排序多关键字排序定义:,例对52张扑克牌按以下次序排序:23A23A23A23A两个关键字:花色()面值(23A)并且“花色”地位高于“面值”,多关键字排序方法最高位优先法(MSD):先对最高位关键字k1(如花色)排序,将序列分成若干子序列,每个子序列有相同的k1值;然后让每个子序列对次关键字k2(如面值)排序,又分成若干更小的子序列;依次重复,直至就每个子序列对最低位关键字kd排序;最后将所有子序列依次连接在一起成为一个有序序列,最低位优先法(LSD):从最低位关键字kd起进行排序,然后再对高一位的关键字排序,依次重复,直至对最高位关键字k1排序后,便成为一个有序序列MSD与LSD不同特点按MSD排序,必须将序列逐层分割成若干子序列,然后对各子序列分别排序按LSD排序,不必分成子序列,对每个关键字都是整个序列参加排序;并且可不通过关键字比较,而通过若干次分配与收集实现排序链式基数排序基数排序:借助“分配”和“收集”对单逻辑关键字进行排序的一种方法链式基数排序:用链表作存储结构的基数排序,链式基数排序步骤设置10个队列,fi和ei分别为第i个队列的头指针和尾指针第一趟分配对最低位关键字(个位)进行,改变记录的指针值,将链表中记录分配至10个链队列中,每个队列记录的关键字的个位相同第一趟收集是改变所有非空队列的队尾记录的指针域,令其指向下一个非空队列的队头记录,重新将10个队列链成一个链表重复上述两步,进行第二趟、第三趟分配和收集,分别对十位、百位进行,最后得到一个有序序列,例,算法描述,算法评价时间复杂度:分配:T(n)=O(n)收集:T(n)=O(rd)T(n)=O(d(n+r)其中:n记录数d关键字位数r关键字每位的取值范围空间复杂度:S(n)=O(n+r)r个队列指针+n个指针域空间,8.6归并排序归并将两个或两个以上的有序表组合成一个新的有序表,叫归并2-路归并排序排序过程设初始序列含有n个记录,则可看成n个有序的子序列,每个子序列长度为1两两合并,得到n/2个长度为2或1的有序子序列再两两合并,如此重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年芜湖市国有资本投资运营有限公司招聘10人考前自测高频考点模拟试题附答案详解(完整版)
- 2025年乐清市市级机关公开遴选考试真题
- 2025年北京市门头沟区法院系统招聘真题
- 飞机装配工基础安全知识考核试卷及答案
- 2025广西玉林市北流市中医医院招聘编外人员21人模拟试卷附答案详解(黄金题型)
- 公司缝纫品整型工职业健康及安全技术规程
- 陶瓷、玻璃文物修复师安全技术规程
- 陶瓷模型制作工劳动法规熟知度考核试卷及答案
- 公司货运汽车司机岗位现场作业技术规程
- 金属船体制造工物料利用率统计考核试卷及答案
- 2025-2026学年辽海版(2024)小学美术二年级上册《巧用材料》教学设计
- 2025海康威视视频安全门禁系统使用手册
- 消防管道保温合同模板
- 南通市第一初中2023~2024初一上学期第一次月考数学试卷及答案
- 电力安全工作规程考试试题(答案)
- 急性胰腺炎护理查房
- 2023年贵州专升本英语真题试卷(完整版)
- JSQ5A夹绳器说明书
- DB14T 2740-2023 春玉米膜侧沟播技术规程
- 福特汽车NVH开发流程
- 中国农业银行笔试题库(含答案)
评论
0/150
提交评论