- 1、本文档共96页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
各种内部排序按所采用的基本思想(策略)可分为:插入排序、交换排序、选择排序、归并排序和基数排序,它们的基本策略分别是: 1 插入排序:依次将无序序列中的一个记录,按关键字值的大小插入到已排好序一个子序列的适当位置,直到所有的记录都插入为止。具体的方法有:直接插入、表插入、2-路插入和shell排序。 2 交换排序:对于待排序记录序列中的记录,两两比较记录的关键字,并对反序的两个记录进行交换,直到整个序列中没有反序的记录偶对为止。具体的方法有:冒泡排序、 快速排序。 3 选择排序:不断地从待排序的记录序列中选取关键字最小的记录,放在已排好序的序列的最后,直到所有记录都被选取为止。具体的方法有:简单选择排序、堆排序。 4 归并排序:利用“归并”技术不断地对待排序记录序列中的有序子序列进行合并,直到合并为一个有序序列为止。 5 基数排序:按待排序记录的关键字的组成成分(“位”)从低到高(或从高到低)进行。每次是按记录关键字某一“位”的值将所有记录分配到相应的桶中,再按桶的编号依次将记录进行收集,最后得到一个有序序列。 各种内部排序方法的性能比较如下表。 方法 平均时间 最坏所需时间 附加空间 稳定性 直接插入 O(n2) O(n2) O(1) 稳定的 Shell 排序 O(n1.3) O(1) 不稳定 简单选择 O(n2) O(n2) O(1) 不稳定 冒泡排序 O(n2) O(n2) O(1) 稳定的 堆排序 O(n㏒2n) O(n㏒2n) O(1) 不稳定 快速排序 O(n㏒2n) O(n2) O(㏒2n) 不稳定 归并排序 O(n㏒2n) O(n㏒2n) O(n) 稳定的 基数排序 O(n㏒2n) O(n㏒2n) O(n+r) 稳定的 表7-1 主要内部排序方法的性能 本章讨论的排序方法是在顺序存储结构上实现的, 在排序过程中需要移动大量记录。当记录数很多、时间耗费很大时,可以采用静态链表作为存储结构。但有些排序方法,若采用静态链表作存储结构,则无法实现表排序。 选取排序方法的主要考虑因素: ◆ 待排序的记录数目n; ◆ 每个记录的大小; ◆ 关键字的结构及其初始状态; ◆ 是否要求排序的稳定性; ◆ 语言工具的特性; ◆ 存储结构的初始条件和要求; ◆ 时间复杂度、空间复杂度和开发工作的复杂程度的平衡点等 有算法理论证明,内部排序算法所能达到的最佳时间复杂度为O(n㏒2n) ⑴ 回答下列各题: ① 从未排序序列中挑选元素,并将其依次放入到已排序序列中(初始时为空)的一端的方法是什么? ② 在待排序的元素基本有序的前提下,效率最高的排序方法是什么? ③ 从未排序序列中依次取出元素与已排序序列 (初始时为空)中的元素进行比较,将其放入已排序序列的正确位置方法是什么? ④ 设有1000个元素, 希望采用最快的速度挑选出其中前10个最大的元素, 最好的方法是什么? ⑵ 若对关键字序列为(54, 37, 93, 25, 17, 68, 58, 41, 76)的一组记录进行快速排序时,递归调用使用的栈所能到达的最大深度是多少?共需递归调用多少次?其中第二次递归调用是对哪组记录进行排序? ⑶ 在堆排序,快速排序和归并排序中,若只从存储空间考虑,应选择哪种方法;若只从排序结果的稳定性考虑,应选择哪种方法;若只从平均情况下排序最快考虑,应选择哪种方法; ⑷ 设有关键字序列为(14, 17, 53, 35, 9, 32, 68, 41, 76, 23)的一组记录,请给出用希尔排序法(增量序列是5, 3, 1)排序时的每一趟结果。 ⑸ 设有关键字序列为(14, 17, 53, 35, 9, 37, 68, 21, 46)的一组记录,请给出冒泡排序法排序时的每一趟结果。 ⑹ 设有关键字序列为(14, 17, 53, 35, 9, 37, 68, 21, 46)的一组记录,利用快速排序法进行排序时,请给出以第一个记录为基准得到的一次划分结果。 ⑺ 设关键字序列为(14, 17, 53, 35, 9, 37, 68, 21)的一组记录,请给出按非递增采用堆排序时的每一趟结果。 ⑻ 设关键字序列为(314, 617, 253, 335, 19, 237, 464, 121, 46, 231, 176, 344)的一组记录,请给出采用基数排序时的每一趟结果。 ⑼ 将哨兵放在R[n]中,被排序的记录存放在R[1…n-1]中,重写直接插入排序算法。 ⑽ 实际中常采用单链表存储数据记录,请写出排序记录的结构的定义并修改。 * 输出最小关键字后,根据关系的可传递性,欲选取次小关键字,只需将叶子结点中的最小关键字改为“
文档评论(0)