- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构专升本第九周
第十章 排序
10.1 概述
一、基本概念
关键字项及关键字(Key):记录由若干个数据项(或域)组成,其中有一项可用来标识一个记录,称为关键字项,该数据项的值称为关键字。 排序(Sorting):又称分类,假设含 n 个记录的序列为{R1,R2,…,Rn}其相应的关键字序列为{K1,K2,…,Kn} 需确定1,2,…,n的一种排列p1,p2,…,pn,使其相应的关键字满足如下的非递减(或非递增)关系 Kp1≤Kp2≤…≤Kpn 。即使初始的的序列成为一个按关键字有序的序列{Rp1,Rp2,…,Rpn}这样一种操作称为排序。 如果待排序的文件中,存在有多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,则称这些排序方法是稳定的;反之,则称这种排序方法是不稳定的。 排序算法的稳定性是针对所有输入实例而言的,即在所有可能的输入实例中,只要有一个实例使得算法不满足稳定性要求,则该排序算法就是不稳定的。 排序方法 内部排序 内部排序(Internal Sorting):在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内排序。 按所用的策略不同,内部排序方法可以分为五类:插入排序、选择排序、交换排序、归并排序、分配排序。外部排序 外部排序(External Sorting):若排序过程中要进行数据的内、外存交换,则称之为外部排序。 排序过程的基本操作 比较两个关键字的大小 改变指向记录的指针或移动记录本身 评价排序算法好坏的标准:执行时间和所需的辅助空间 就地排序(In-Place Sort):若排序算法所需的辅助空间并不依赖于规模n,也就是说辅助空间是O(1),则称之为就地排序。顺序表类型说明 几种基本的排序方法 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 直接插入排序 直接插入排序(Straight Insertion Sort):将一个记录插入到排好序的有序表中,从而得到一个新的、记录数增1的有序表。 直接插入排序算法 哨兵(监视哨)有两个作用:一是作为临变量存放R[i](当前要进行比较的关键字)的副本;二是在查找循环中用来监视下标变量j是否越界。当文件的初始状态不同时,直接插入排序所耗费的时间是有很大差异的。最好情况是文件初态为正序,此时算法的时间复杂度为O(n),最坏情况是文件初态为反序,相应的时间复杂度为O(n2),算法的平均时间复杂度是O(n2)。算法的辅助空间复杂度是O(1),是一个就地排序。 直接插入排序是稳定的排序方法。二分插入排序:“查找”操作利用“二分查找”来实现,由此进行的插入排序称为二分插入排序。 二分插入排序算法 用二分插入排序所要进行的总比较次数为O(lgn),当n较大时,比直接插入排序的最大比较次数小得多,但大于最小比较次数。 二分插入排序方法是稳定的。希尔排序(Shell Sort):先取定一个正整数d1(<n),把全部记录分成d1个组,所有距离为d1倍数的记录放在一组中,在各组内进行插入排序;然后取d2<d1,重复上述分组和排序工作,直至取di=1,即所有记录放在一个组中排序为止。void ShellPass(SeqList R,int d)
{ //希尔排序中的一趟排序,d为当前增量
int i,j;
for(i=d+1;i=n;i++) //将R[d+1..n]分别插入各组当前的有序区
if(R[i].keyR[i-d].key) {
R[0]=R[i];j=i-d; //R[0]只是暂存单元,不是哨兵
do { //查找R[i]的插入位置
R[j+d]=R[j]; //后移记录
j=j-d; //查找前一记录
} while(j0R[0].keyR[j].key);
R[j+d]=R[0]; //插入R[i]到正确的位置上
}
}
void ShellSort(SeqList R)
{
int increment=n; //增量初值,不妨设n0
do {
increment=increment/3+1; //求下一增量
ShellPass(R,increment); //一趟增量为increment的Shell插入排序
} while(increment1);
}
希尔排序特点:每次以不同的增量分组进行插入排序,在最后一次作插入排序时,所有记录“几乎”有序了。由于前面几次排序中增量均大于1,“逆序”记录作跳跃移动,这就提高了排序速度,所以比直接插入排序要快。 希尔排序是不稳定的排序方法。交换排序的基本思想:两两比较待排
您可能关注的文档
- 2015年山东省德州市中考语文试题(图片版,含答案).doc
- 2015年山东省枣庄市中考化学试题(word版附答案).doc
- 2015年山东省梁山县事业单位招考复习资料.doc
- 脑萎缩的治疗入手.doc
- 2015年山东省泰安市中考化学试题(版,含答案).doc
- 脑血管病典型病例分析.ppt
- 2015年山西省公务员招考笔试试题.doc
- 数据库考试重点总结.doc
- 脱肛的原因.ppt
- 2015年岗前培训考试试题.doc
- 2024年学校党总支巡察整改专题民主生活会个人对照检查材料3.docx
- 2025年民主生活会个人对照检查发言材料(四个带头).docx
- 县委常委班子2025年专题生活会带头严守政治纪律和政治规矩,维护党的团结统一等“四个带头方面”对照检查材料四个带头:.docx
- 巡察整改专题民主生活会个人对照检查材料5.docx
- 2024年度围绕带头增强党性、严守纪律、砥砺作风方面等“四个方面”自我对照(问题、措施)7.docx
- 2025年度民主生活会领导班子对照检查材料(“四个带头”).docx
- 国企党委书记2025年度民主生活会个人对照检查材料(五个带头).docx
- 带头严守政治纪律和政治规矩,维护党的团结统一等(四个方面)存在的问题整改发言提纲.docx
- 党委书记党组书记2025年带头增强党性、严守纪律、砥砺作风方面等“四个带头”个人对照检查发言材料.docx
- 2025年巡视巡察专题民主生活会对照检查材料.docx
最近下载
- 2024年度公司领导班子民主生活会对照检查材料3篇.docx VIP
- JTGD60—2015公路桥涵设计通用规范.pdf VIP
- 技术部薪酬及岗位制度.doc
- 马工程教材《组织行为学》课件 第四章 团队.pptx
- 标准规范文件:DL/T 5424-2009 水电水利工程锚杆无损检测规程.pdf
- 广东省广州市八年级上学期物理期末试卷四套(附参考答案).doc VIP
- 2019-2020年高一英语人教版必修1专项训练:语法填空Word版含答案.docx VIP
- 第19课《大雁归来》教学设计 统编版语文七年级上册(2024年).docx VIP
- 2022水电工程移动式集运鱼系统设计规范.docx
- 2024年6月英语四级真题(全3套).pdf
文档评论(0)