- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 第10章 内部排序 10.1 概述 10.2 插入排序 10.3 快速排序 10.4 选择排序 10.5 归并排序 10.6 基数排序 10.7 各种内部排序方法的比较讨论 排序概述 排序的功能:将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列 排序的稳定性:如果在待排序的记录序列中有多个数据元素的关键字值相同,经过排序后,这些数据元素的相对次序保持不变,则称这种排序算法是稳定的,否则称之为不稳定的 如果排序算法是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用 排序的分类 内部排序和外部排序:内部排序是指在排序的整个过程中,待排序的所有数据元素全部被放置在内存中;外部排序是指由于待排序的数据元素个数太多,而需要将一部分数据元素放置在内存,另一部分数据元素放置在外设上 内部排序 按不同排序原则:插入、交换、选择、归并、基数 按所需工作量:简单O(n2)、先进O(nlogn)、基数O(d·n) 排序概述 排序过程中的基本操作 比较两个关键字 将记录从一个位置移到另一个位置 待排序序列的存储方式 地址连续的存储单元(类似于顺序存储) 静态链表中(排序时修改指针,不移动位置) 有地址向量的连续存储单元(修改记录地址) 插入排序 直接插入排序(简单排序) 基本操作:从数组的第二个单元开始,依次从原始数据中取出数据,并将其插入到数组中该单元之前的已排好序的序列中合适的位置处 操作步骤: 从已排好的序列尾部开始,逐一比较,找到新记录该插入的位置,完成第一次插入 第i趟就是在含有i-1个记录的有序子序列r[1..i-1]中插入记录r[i]后变成含有i个记录的有序序列 为防止数组下标出界,在r[0]处设置监视哨 整个过程进行n-1次插入 直接插入排序过程 初始:49 38 65 97 76 13 27 49 i=2: 38 49 65 97 76 13 27 49 i=3: 38 49 65 97 76 13 27 49 i=4: 38 49 65 97 76 13 27 49 i=5: 38 49 65 76 97 13 27 49 i=6: 13 38 49 65 76 97 27 49 i=7: 13 27 38 49 65 76 97 49 i=8: 13 27 38 49 49 65 76 97 void InsertSort(SeqList R){ for(i=2;i=n;i++) //依次插入R[2],...,R[n] if(R[i].keyR[i-1].key){ /*若R[i].key大于等于已有序区中所有的key,则R[i]应在原有位置上*/ R[0]=R[i];//R[0]是哨兵,也是R[i]的副本 for(j=i-1; R[0].keyR[j].key; j--) R[j+1]=R[j]; /*将关键字大于R[i].key的记录后移*/ R[j+1]=R[0]; }//endif }//InsertSort 插入排序 折半排序 简单插入的缺点:当n大时,耗时 基本操作:在一个有序表中进行查找(使用折半查找法)和插入 操作步骤: 设立两个指针:low、high 通过比较,查找和插入 插入排序 希尔排序: 优点:在时间上做了改进(分组插入法) 基本思想:将待排记录分成若干序列(定义一个增量)进行直接排序,直到序列基本有序。“基本有序”时对全体记录进行一次直接插入排序 增量的选择:增量序列应该是没有除1之外的公因子,并且最后一个增量值必须是1 不稳定排序算法 希尔排序过程 void ShellInsert(SeqList R, int dk){ for(i=dk+1;i=n;i++) if(R[i].keyR[i-dk].key){ R[0]=R[i]; //R[0] 是R[i]的副本 for(j=i-dk; j0R[0].keyR[j].key; j=j-dk) R[j+dk]=R[j]; //记录后移 R[j+dk]=R[0]; } } void ShellSort(SeqList R, int dlta[], int t){ for(k=0; kt; k++) ShellInsert(R,dlta[k]); } 交换排序 冒泡排序 基本思想:将每个记录R[i]看作是重量为R[i].key的气泡,根据轻气泡不在重气泡之下的原则,从下往上扫描数组R,逐一比较,交换顺序 适合n较小的情况 冒泡排
您可能关注的文档
- 程序设计基础教案1.doc
- 创建数据访问层.doc
- 大型灌区节水改造项目管理GIS系统系统介绍.ppt
- 大学生学习规划.ppt
- 低温压力容器的设计.ppt
- 第0章 C#课程介绍(蒲剑波).ppt
- 第00章 课程概述.ppt
- 第1讲_MATLAB入门.ppt
- 第1章 SQLServer2005系统概述.ppt
- 第1章 Web编程技术概述.ppt
- 外研版选择性必修第三册 Unit 3 War and peace Starting Out & Understanding Ideas课件(共37张PPT).pptx
- 第14课 第一次世界大战与战后国际秩序 授课课件(共31张PPT).pptx
- 第18课 科技文化成就 课件(共19张PPT).pptx
- 人教版(2025) 必修第三册 Unit 2 Morals and Virtues Listening and Speaking课件(共22张).pptx
- 第20课 狼 课件(共35张PPT).pptx
- 外研版选择性必修 第三册Unit 2 A life’s work Starting out课件(共17张PPT).pptx
- 北师大版(2025) 必修第三册 Unit 8 Green Living Lesson 1 Roots and Shoots Lesson1课件(共23张PPT).pptx
- 北师大版(2025)必修第一册Unit 1 Life Choices Topic Talk 课件(共14张).pptx
- 人教版(2025) 必修第一册 Unit 1 Teenage Life Reading and Thinking 课件(共14张PPT).pptx
- 人教版(2025) 必修第一册 Unit 2 Travelling Around Listening and Talking课件(共16张PPT).pptx
最近下载
- APQP 先期产品质量策划(第三版)2024 中英文(高清可复制).doc
- 基于51单片机的二氧化碳浓度检测仪的设计.doc
- 2024—2025学年最新人教新版八年级下学期数学期末考试试卷 .pdf VIP
- MSD(湿敏器件防护)控制规范精讲.doc
- 《珍爱生命、预防溺水》主题班会 课件(共24张PPT)(含音频+视频).pptx VIP
- 2025年反诈防骗安全知识竞赛题库及答案.docx
- 高中英语读后续写满分突破主题专练:专题02 人与动物主题续写(解析版).doc VIP
- GA 423-2015 警用防弹盾牌.pdf
- 社区生鲜招商方案.docx VIP
- 最新2025年行政执法证完整考试题库必背100题(含标准答案).pdf VIP
文档评论(0)