- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.4 归并排序 归并排序是建立在合并有序序列操作上的一种排序算法。归表示递归,通过递归把无序列表分为若干个有序序列。并表示合并,将多个有序列合并起来。 初始序列arr有n个元素,可以通过递归的方式,将其拆成n个有序的子序列,每个子序列的长度为1。 步骤1: 将n个有序子序列两两归并,得到n/2个长度为2的有序子序列。 步骤2: 重复步骤2,直到得到一个长度为n的有序序列,算法结束。 步骤3: 1.算法思想 拆分序列 一趟归并序列 二趟归并序列 三趟归并序列 9.4 归并排序 学 习 进 步! 数据结构(Python语言描述) * * * * * * 数据结构(Python语言描述) 李粤平 第9章 排序 把一个无序序列按照元素的关键字递增或递减排列为有序的序列,称为排序。其中,按照元素的关键字递增排序的序列称为升序序列,按照元素的关键字递减排序的序列称为降序序列。 数据结构(Python语言描述) 排序分类 排序基本操作 比较两个关键字大小 将记录从一个位置移动到另一个位置 排序 - ÷ × + 插入排序:直接插入排序、希尔排序 选择排序:直接选择排序、堆排序 交换排序:冒泡排序、快速排序 归并排序:2-路归并排序 稳定排序与非稳定排序 在待排序的文件中,如果存在多个排序码相同的记录,经过排序后,相同排序码记录的相对次序如果保持不变,则称这种排序方法是稳定的,否则是不稳定的。 评价排序算法代价的标准 执行算法所需的时间;比较次数、移动次数 执行算法所需要的附加空间; 算法本身的复杂程度 排序 01 OPTION 02 OPTION 直接插入排序将待排序序列arr={a0,a1,…,ai,…an-1}的n个元素分为一个有序序列和一个无序序列。 9.1.1 直接插入排序 初始时,有序序列只包括一个元素{a0},无序序列有n-1个元素{a1,a2,…,an-1}。 步骤1: 在排序的过程中,每次从无序序列中取出一个元素,将其插入有序序列中合适的位置,使之成为新的有序序列。 步骤2: 重复步骤2,直至无序序列为空,算法结束。 步骤3: 5G 第一趟 第二趟 第三趟 第四趟 第五趟 第六趟 9.1.1 直接插入排序 直接插入排序将待排序序列arr={a0,a1,…,ai,…an-1}的n个元素分为一个有序序列和一个无序序列。 9.1.1 直接插入排序 初始时,有序序列只包括一个元素{a0},无序序列有n-1个元素{a1,a2,…,an-1}。 步骤1: 在排序的过程中,每次从无序序列中取出一个元素,将其插入有序序列中合适的位置,使之成为新的有序序列。 步骤2: 重复步骤2,直至无序序列为空,算法结束。 步骤3: 5G 1.算法流程 9.1.2 希尔排序 希尔排序是插入排序的一种算法,是对直接插入排序的优化,也称缩小增量排序。 对于n个待排序元素的数列,取一个增量gap=n/2 步骤1: 将待排元素分成若干个子序列,距离为gap倍的元素放在同一个组中。 步骤2: 对若干个组内的元素进行直接插入排序,该趟排序完成后,各组内的元素都是有序的。 步骤3: 对增量gap进行修改,gap = gap/2,然后重复步骤2和步骤3;直至gap的数值为1(此时为直接插入排序),排序结束。 步骤4: 第一趟 9.1.2 希尔排序 gap=4 第二趟 9.1.2 希尔排序 gap=2 第三趟 9.1.2 希尔排序 gap=1 9.2.1 直接选择排序 1.算法流程 从当前未排序序列{a0,a1,…,an-1}的n个元素中选出关键字最小(最大)的元素,存放到排序序列的起始位置。 步骤1: 从剩余未排序元素中继续寻找最小(最大)元素,然后放到已排序序列的末尾。 步骤2: 重复步骤2,直到所有元素均排序完毕。 步骤3: 5G 第一趟 第二趟 第三趟 第四趟 9.2.1 直接选择排序 第五趟 第六趟 9.2.1 直接选择排序 9.2.2 堆排序 1.基本思想 堆排序就是利用堆进行排序的方法,因为堆顶元素是最大(小)值,把堆顶元素删除后,利用向下调整操作重新维护成堆,此时就有了次大(小)值,重复此操作直至全部元素被删除。具体流程如下: 首先,将待排序的数组arr构造成一个大(小)根堆。 步骤1: 堆中的最大(小)值就是堆顶根节点,将堆顶根节点与堆的末尾元素交换,并将末尾元素从堆中删除(只改变堆大小,不从数组中删除)。然后,从堆顶根节点进行向下调整操作,将重新构成一个大(小)根堆。 步骤2: 重复步骤2,直至堆中所有元素被删除。此时,数组arr为升序(降序)序列。 步骤3: 将数组arr构建成大根堆 arr = [6, 3, 7, 1, 9, 2, 4] 第二趟 第一趟 第三趟 9.2.2 堆排序 第四趟 第五趟 第六趟 第七趟 9.2.2 堆排序 第八趟 第
文档评论(0)