数据结构全套课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
全套课件完整版课件ppt整套电子教案全书电子教案课件教程教学课件汇总汇集

2.基本思想 堆排序(Heap Sort)是一种选择排序,它有两个最基本的操作:取最小元或最大元和把最小元或最大元并入已排序好的元素中去,步骤如下: (1)建堆:将待排序元素部分调整为堆。 (2)取最小元素或最大元素:取堆顶元素。 (3)加入:将最小元或最大元加入到已排序部分中。 9.4 选择排序 例9-7:有初始堆形如图9.9所示,用堆排序方法将此初始堆形变成一个堆。 (1) (2) 9.4 选择排序 (3) 图9.10 建堆过程 原始堆 (1)表示:34比15大,因此,需要调整,把34和15交换位置。 (1) (2)表示:40比20大,因此,需要调整,把40和20交换位置。 (2) (4)表示:30比15大,因此,需要调整,把30和15交换位置。 通过分析可以得到,从初始堆形变成堆,进行了三次调整,原则是自下而上,自右向左。 建堆完成后,就可以对堆中的元素进行堆排序,堆排序的基本思想是将堆中第一个结点(二叉树根结点)和最后一个结点的数据进行交换(k1与kn),再将k1∽kn-1重新建堆,然后k1和kn-1交换,再将k1∽kn-2重新建堆,然后k1和kn-2交换,如此重复下去,每次重新建堆的元素个数不断减1,直到重新建堆的元素个数仅剩一个为止。这时堆排序已经完成,则排序码k1,k2,k3,…,kn已排成一个有序序列。 9.4 选择排序 例9-7:有初始堆如图9.10(3)所示,用堆排序方法将此初始堆变成一个有序序列。过程如图8.11所示。 (1)15和70交换后,有序序列及重新建成的堆 9.4 选择排序 (2)20和70交换后,有序序列及重新建成的堆 (3)30和70交换后,有序序列及重新建成的堆 (4)34和70交换后,有序序列及重新建成的堆 (5)40和70交换后,有序序列及重新建成的堆(6)50和70交换后,有序序列及重新建成的堆 3.堆排序算法 9.4 选择排序 堆排序算法分两步完成:下面算法中的adjust函数给出一次筛选过程,heapsort函数是完整的堆排序算法。 void adjust(datatype a[ ],int n,int m, int r) { /*一次筛选过程*/ int i,j,t; i=m;j=2*i;t=a[i]; While(j=r) { if ((jra[j]a[j+1]) j=j+1; if (ta[j]){a[i]=a[j];i=j;j=2*i; else j=r+1; if (i!=m) a[i]=t; } } void heapsort(datatype a[ ],int n) { /*堆排序算法*/ int m,r,t; for(m=ndiv2;m=1;m--) adjust(a,m,n); r=n; while(rm) { t=a[m];a[m]=a[r];a[r]=t;r=r-1;adjust(a,m,r);}} 4.堆排序的效率分析 9.4 选择排序 从时间复杂度看,在整个堆排序中,共需要进行n+?n/2? -1次筛选,每次筛选进行双亲和孩子或兄弟结点的关键码的比较和移动次数都不会超过完全二叉树的深度,因此,每次筛选的时间复杂度为O(log2n),故整个堆排序过程的时间复杂度为O(nlog2n)。 从空间复杂度看,堆排序占用的辅助空间为1,因此,它的空间复杂度为O(1)。 一般如果排序的对象比较大,在这种情况下可以选择堆排序。堆排序是一种不稳定的排序方法。 归并排序(Merge Sort)又称合并排序。所谓归并就是将两个或两个以上的已排好序的数据合并成一个有序的数据表,归并排序则是以归并为工具,将过若干次归并,最后得到一个有序数据表,因此,在归并排序中,主要解决的是如何进行归并。归并方式有很多种,但用得较多的是二路归并即在归并时两个两个地进行。下面介绍二路归并排序算法。 1.基本思想 将两个有序表合并成一个有序表,一次合并完成后,有序表的数目减少一半,而有序表中的数据元素长度增加一倍,直至有序表中的数据元素长度从1增加到n时,整个有序表变为了一个数据长度为n的有序表为止。 具体步骤如下: (1)将n个数的待排序数组看成n个长为1的有序表。 (2)将两两相邻的有序表依次进行归并。 (3)不断重复(2)步,直至归并成一个有序表为止。 9.5 归并排序 从基本思想可以看出,最重要的一步操作就是归并,归并分为如下两步: (1

文档评论(0)

BLUED + 关注
实名认证
内容提供者

教师资格证持证人

全网 内容最全课件 价格最低 质量最高 不是之一,是唯一。 每个人使用的办公软件版本不一样,如有个别显示不出的文件,建议使用最新版。

版权声明书
用户编号:8070063100000015
领域认证该用户于2023年03月20日上传了教师资格证

1亿VIP精品文档

相关文档