- 1、本文档共84页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法与数据结构(c语言) 第8章 排序.ppt
第八章 排序 目录 8.1 基本概念 8.2 插入排序 8.2.1 直接插入排序 8.2.2 二分法插入排序 8.2.3 表插入排序 8.2.4 Shell排序 8.3 选择排序 8.3.1 直接选择排序 8.3.2 堆排序 ? 8.4 交换排序 8.4.1 起泡排序 8.4.2 快速排序 8.5 分配排序 8.5.1 概述 8.5.2 基数排序 8.6 归并排序 8.6.1 内排序 8.6.2 外排序* 8.1 基本概念 排序看成字典上的操作 在排序的讨论中,并不关心被排序对象本身的逻辑结构,所以读者可以把排序看成是字典上的一种操作。 不同的排序算法,可能依赖与不同的存储结构,可以理解为在字典的不同存储表示上排序的实现。 而把非字典结构中元素的排序,归结为是对于其结点按照排序码建立的密集索引的排序。 与上一章关于索引的讨论类似,在本章的具体排序算法中,只关心排序码的作用和表示,而把记录中的其它字典隐藏起来。 评价排序算法代价的标准 第一,执行算法所需的时间; 比较次数、移动次数 第二,执行算法所需要的附加空间; 另外,算法本身的复杂程度也是比较算法一个因素。 8.2 插入排序 直接插入排序 二分法插入排序 表插入排序 shell排序 8.2.1 直接插入排序 假设待排序的n个记录{R0,R1,…,Rn-1}顺序存放在数组中,直接插入法在插入记录Ri(i=1,2…n-1)时,记录集合被划分为两个区间[R0,Ri-1 ]和[Ri,Rn-1 ],其中,前一个子区间已经排好序,后一个子区间是当前未排序的部分,将排序码Ki与Ki-1,Ki-2,…,K0依次比较,找出应该插入的位置,将记录Ri插入。 直接插入排序采用顺序存储结构。 例题 设待排序的记录共8个,排序码分别为49,38,65,97,76,13,27,49’,请用直接插入排序法排序(为了区别两个相同的排序码49,后面的49用49’表示)。 初始序列∶ [49] 38 65 97 76 13 27 49’ i = 1∶[38 49] 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 76 97] 13 27 49’ i = 5∶[13 38 49 65 76 97] 27 49’ i = 6∶[13 27 38 49 65 76 97] 49’ i = 7∶[13 27 38 49 49’ 65 76 97] 程序实现:void insertSort(SortObject * pvector) 若文件初态为正序,则算法的时间复杂度为O(n),若初态为反序,则时间复杂度为O(n2)。 平均移动次数与平均比较次数同级,是O(n2)。直接插入排序的平均时间复杂度为T(n)=O(n2)。 算法中引入了一个附加的记录空间temp,因此辅助空间为S(n)=O(1)。 直接插入排序是稳定的。 8.2.2 二分法插入排序 在直接插入排序的基础上减少比较的次数,即在插入Ri时改用二分法比较找插入位置,便得到二分法插入排序。 (1) [13 27 38 49 65 76 97] 49’ (2) 13 27 38 49 [65 76 97] 49’ (3) 13 27 38 49 [65] 76 97 49’ (4) 13 27 38 49 49’ 65 76 97 二分法插入排序示例 存储结构与算法 二分法插入排序必须采用顺序存储方式,存储结构的定义同上一节的SortObject。 程序实现 代价分析 二分法插入排序的比较次数与待排序记录的初始状态无关,仅依赖于记录的个数。 插入第i个记录时,如果i=2j (0≤j≤),则恰好经过j=log2i次比较;如果2j<i≤2j+1,则比较次数为j+1。 排序的总比较次数为∶ =0+1+2+2+…+k+k+…+k (20个1,21个2,2k-1个k)=1+2+22+…+2k-1 +2+22+…+2k-1 +22+…+2k-1 …=k·2k-2k+1=n·log2n-n+1≈n·log2n 代价分
文档评论(0)