8排序4ppt.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8排序4ppt

数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 数据结构---排序 8 排序(4) 教学目标 1、掌握排序的概念,常用排序的方法及特点,并能进行时间复杂度、空间复杂度及算法稳定性的分析; 2、掌握插入排序、冒泡排序、选择排序、希尔排序的方法、算法; 3、掌握快速排序、堆排序、归并排序、基数排序的方法; 4、基本掌握快速排序、堆排序、归并排序的算法思想。 5、熟悉各种(类)排序方法的特点及相应的时间、空间复杂度。 6、了解STL中的相关排序算法。 8.1 概述 8.2 插入排序 8.3 交换排序 8.4 选择排序(堆排序) 8.5 归并排序 8.6 基数排序 8.7 各种排序方法的综合比较 8.8 STL与排序 教学内容 8.7 各种排序方法的综合比较 排序方法 最坏时间 复杂度 平均时间 复杂度 辅助空间 稳定性 直接插入排序 O(n2) O(n2) O(1) 稳定 Shell排序 O(n2) O(n1.25) O(1) 不稳定 冒泡排序 O(n2) O(n2) O(1) 稳定 快速排序 O(n2) O(nlog n) O(log n) 不稳定 简单选择排序 O(n2) O(n2) O(1) 不稳定 堆排序 O(nlog n) O(nlog n) O(1) 不稳定 归并排序 O(nlog n) O(nlog n) O(n) 稳定 基数排序 O(d(n+r)) O(d(n+r)) O(n+2r) 稳定 从平均时间复杂度考虑,快速排序法的平均速度最快(这也是实践中大量采用快速排序的原因); 从最坏的时间复杂度考虑,快速排序为O(n2),这一点不如堆排序和归并排序; 当 n 较大时归并排序可能比堆排序快,但归并排序需要很大的辅助空间; 朴素排序算法中直接插入排序最简单,当序列中的记录“基本有序”或n值较小时,可以优先选用直接插入排序。这种排序算法也常常与其他排序方法结合使用(例如,一些实用快速排序算法在划分出的分段很短时,通常转而用插入排序);当序列接近有序时,直接插入排序速度很快; 稳定性:大部分时间复杂度为O(n2)的简单排序法都是稳定的,大部分时间性能较好的排序都是不稳定的。一般来说,排序过程中的比较是在相邻的两个记录关键字之间进行的排序方法是稳定的。稳定性由方法本身决定,不稳定的方法总能举出使其不稳定的实例; 基数排序最适合n很大而关键字较小的序列; 所有的简单排序方法(包括:直接插入、冒泡和简单选择) 和堆排序的空间复杂度为O(1);快速排序为O(log n),这是递归程序执行过程中,栈所需的辅助空间;归并排序所需辅助空间最多,其空间复杂度为 O(n); 关于“排序方法的时间复杂度的下限” 本章讨论的各种排序方法,除基数排序外,其它方法都是基于“比较关键字”进行排序的排序方法。可以证明,这类排序法可能达到的最快的时间复杂度为O(nlogn)。 由于基数排序不是基于“比较关键字”的排序方法,所以它不受这个限制。 例如:对三个关键字进行排序的判定树如下: K1K3 K1K2 K1K3 K2K3 K2 K3 K2K1K3 K1K2K3 K3K2K1 K2K3K1 K3K1K2 K1K3K2 1.树上的每一次“比较”都是必要的; 2.树上的叶子结点包含所有可能情况。 一般情况下,对n个关键字进行排序,可能得到的结果有n! 种,由于含n! 个叶子结点的二叉树的深度不小于?log2(n!)? +1, 则对 n 个关键字进行排序的比较次数至少是 ?log2(n!)? ? nlog2n (斯特林(Stirling)公式近似公式)。 所以,基于“比较关键字”进行排序的排序方法,可能达到的最快的时间复杂度为 O(nlogn)。 网址: /wiki/斯特林公式 8.8 STL与排序 sort stable_sort partial_sort nth_element make_heap(建堆) push_heap(插入) pop_heap(删除) sort_heap(堆排序) 关于heap相关的操作方法,建议课后自学 STL在它的排序算法方面做了哪些优化呢? 自从快速排序算法出世以后,从平均性能上来说,除了在数据量极少(=20)的的情况下其性能不如插入排序外,快速排序算法的性能起码是其他同阶算法的2到3倍,这已经是不争的事实。 STL中的sort算法,采用混合算法: 在数据量少的时候,算法转入插入排序; 其它情况下则优先采用快速排序; STL还对快速排序算法的补充:快速排序的特点是平均性能好,能达到O(NlgN)的性能,缺点是对

文档评论(0)

叮当文档 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档