- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件查找和排序排序
第二节 排序 一、基本概念 二、选择排序 三、插入排序 四、交换排序 五、归并排序 稳定的排序 当待排序记录的关键字均不相同时,则排序结果是唯一的,否则排序的结果不一定唯一。 如果在待排序文件中存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,则称这种排序方法是稳定的,否则排序算法是不稳定的。 评价排序算法好坏的标准 执行时间 所需的辅助空间 算法的复杂程度 选择排序——简单选择排序 每一趟从待排序的记录中选出关键字最小的记录,顺序存放已排好的子文件的最后(最前),直到全部记录排序完毕。 简单选择排序特点 容易理解 其时间复杂度为O(n^2) 算法是不稳定的 选择排序——堆排序 堆 堆就是一个关键字序列:并且这n个关键字的序列K1,K2...Kn要满足以下性质(堆性质),就是: Ki≥K2i且Ki≥K2i+1 或者 Ki≤K2i且Ki≤K2i+1 堆 当把这个序列存入一个向量并把它看作是一棵完全二叉树的存储结构时,堆就是这样一棵二叉树:任一非叶结点的关键字均不小于(或不大于)其左右孩子结点的关键字。 堆排序基本思想 因为堆顶是最大的数,所以当把一个关键字序列排成一个大根堆时,就很容易地找到最大的数,它就在序列的第一个位置上 然后把这个最大的数与最后一个记录交换,这时,最后一个记录就是关键字最大的记录了。 对于剩下的关键字序列,我们仍然把它排成一个大根堆,然后再把第一个记录(当前堆中的堆顶)与当前堆的最后一个记录交换。这时,在整个序列后面就有了两个有序的关键字(从小到大)。 重复这样的过程,就可以把有序区不断扩大直到全部关键字都进入有序区。直到排序完成。 堆的构造 无序序列r[1:n]构成的完全二叉树, 从它最后一个非叶子结点(第n/2个元素)开始直到根结点为止,逐步进行调整即可将此完全二叉树构成堆。 调整:与其左右子树根结点值比较,取其中大的进行交换。 堆的构造例 堆的构造例 堆的构造例 堆的构造例 堆的构造例 调整成堆算法 堆排序 由给定的无序序列构造堆 将堆顶元素与堆中最后一个元素交换 将最后一个元素从堆中“删除” 将余下的元素构成完全二叉树重新调整成堆 反复进行,直到堆空 堆排序过程示例 堆排序过程示例(续1) 堆排序过程示例(续2) 堆排序过程 堆排序算法 堆排序算法 算法分析 这个算法主要是建立初始堆和重建堆的过程。它的时间复杂度最坏情况下为O(nlgn),而平均性能接近于最坏性能。 堆排序不适宜于记录数较少的文件。堆排序是不稳定的。 三、插入排序 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 线性插入排序 对半插入排序 哨兵(监视哨) 哨兵(监视哨)有两个作用: 作为临时变量存放R[i](当前要进行比较的关键字)的副本, 在查找循环中用来监视下标变量j是否越界。 P105 例 线性插入排序算法分析 时间复杂度在不同输入实例时是不同的, 最好情况是文件初态为正序,此时算法的时间复杂度为O(n), 最坏情况是文件为反序,时间复杂度为O(n^2), 算法的平均时间复杂度也是O(n^2). 该算法的空间复杂度为O(1) 。 线性插入排序是稳定的。也就是相同关键字的记录的相对位置在排序后不发生改变。 插入排序——对半插入排序 在有序区中进行对分查找,以确定插入的位置, 移动记录腾出空间,将相应关键字的记录插入 对半插入排序算法分析 平均时间复杂度也是O(n^2). 空间复杂度为O(1), 四、交换排序 两两比较待排序记录的关键字,发现两个记录次序相反时即进行交换,直到没有反序的记录为止。 冒泡排序 快速排序 冒泡排序示例 冒泡排序算法 冒泡排序算法分析 正序:时间复杂度为O(n) 逆序:时间复杂度为O(n2) 平均时间复杂度也是O(n2) 空间复杂度为O(1) 冒泡排序算法是稳定的 。 适合于数据较少的情况。 排序n个记录的文件最多需要n-1趟冒泡排序。 快速排序一趟算法 快速排序一趟算法 快速排序例 快速排序算法 快速排序算法分析 对于快速排序,其时间主要耗费在划分操作上,最坏的情况是每次划分选取的基准都是当前无序区中关键字最小(或最大)的记录。这时快速排序必须作n-1次划分,时间复杂度为O(n2).这种情况就是文件已按递增序或递减序排列。在最好的情况下,每次划分所选的基准都是当前无序区的中值记录,此时的时间复杂度为O(nlog2n) 。由于出现最坏情况的输入实例概率极小,因此它的平均性能接近于它的最好时间复杂度,也是O(nlog2n). 快速排序算法是非稳定的。 五、归并排序 归并排序又称为表排序,其含义是将两个有序序列合并成为一个有序序列。1、基本思想
您可能关注的文档
最近下载
- 持续推动党的创新理论体系化学理化PPT坚持两个结合把握六个必须坚持PPT课件(带内容).pptx VIP
- 第五章幼儿园主题活动的环境创设.pptx VIP
- 中达a600变频器说明书.pdf VIP
- 校园欺凌与初中生心理健康教育的协同发展策略教学研究课题报告.docx
- 老板电器应收账款及优化探究.docx VIP
- 一种柔性翻身多功能护理轮椅床.pdf VIP
- 小学英语与初中英语教学的衔接教学研究课题报告.docx
- 2025【阶跃阻抗低通滤波器的电路模型构建及其参数探析12000字】.docx VIP
- 2025中国银河证券校园招聘5人笔试历年参考题库附带答案详解.docx VIP
- 参加活动的意义班会.pptx VIP
原创力文档


文档评论(0)