3_一级指导教教案_数据结构2.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文档。上传文档
查看更多
4、 Shell排序算法 基本思想: 先将整个待排序记录序列分割成若干子序列分别进行直接插入排序,待整个序列“基本有序”时,再对全体记录进行一次直接插入排序。 特点:子序列的构成不是简单地“逐段分割”,而是将相隔某个“增量”的记录组成一个子序列。 用Shell排序法排序,第一次的增量取n/2,以后的增量为前一次的一半,直到增量为1时排序完成。 算法复杂度:O(n3/2) Shell排序举例(非稳定的) 5、堆排序 堆的定义: n个元素的序列{k1,k2,...,kn}当且仅当满足下列条件时,称之为堆。  堆排序的基本思想: 对一组待排序的关键码,首先把它们按堆的定义排列成一个序列(称为建堆),这就找到了最小的关键码,然后将最小的关键码取出,用剩下的关键码再建堆,便得到次最小的关键码,如此反复进行,直到将全部关键码排好序为止。 根结点是堆中的最小元素。 实现堆要解决的问题 1、如何从一个无序序列建成一个堆? 2、如何在输出堆顶元素之后,调整剩余元素成为一个新的堆? 例:图a是个堆,假设输出堆顶元素之后,以堆中最后一个元素代之,如图b。此时根结点的左、右子树均为堆,则仅需自上至下进行调整即可。 首先以堆顶元素和其左、右子树根结点的值比较之,由于右子树根结点的值小于左子树根结点的值且小于根结点的值,则将24和91交换之; 由于91替代了24之后破坏了右子树的堆,则需要进行和上述相同的调整,直至叶子结点; 重复上述过程,将堆顶元素91和堆中最后一个元素30交换且调整,得到如图d所示新的堆。 称这个自堆顶至叶子的调整过程为“筛选”。 PROC sift(VAR r : listtype; k , m: integer ); {假设r [ k+1 . . m ]中各元素满足堆的性质, 本算法调整r [ k ]使整个序列r [ k . . m ]中各元素满足堆的性质} i : = k ; j : = 2 *i ; x : = r [ k ] . key ; finished : = fakse ; t : = r [ k ] ; {暂存“根”记录r [ k ]} WHILE (j=m) AND NOT finished DO [ IF (jm) AND (r[j] . Key r[j+1 ] . Key) THEN j : = j +1; {若存在右子树,且右子树根的关键字小,则沿右分支“筛选”} IF x= r[ j ] . Key THEN finished : = true {筛选完毕} ELSE [ r [i] : = r [ j ] ; i : =j ; j : = 2*i ] {继续筛选} ] r [ i]:=t ENDP; {SIFT} 1、从无序序列建成一个堆 从一个无无序序列建成一个堆的过程就是一个反复“筛选”的过程。 若将此序列看成是一个完全二叉树,则最后一个非终端结点是第[n/2]个元素,由此“筛选”只需从第[n/2]个元素开始。 堆排序算法: PROC heapsort(VAR r:listtype); {r[1..n]对进行堆排序,执行本算法后,r中记录按关键字从大到小有序排列} FOR i:=[n/2] DOWNTO 1 DO sift(r,I,n); {自第[n/2]个记录开始进行筛选建堆} FOR i:=n DOWNTO 2 DO [ r[1] 〈-〉 r[i] ; {将堆顶记录和堆中最后一个记录互换} sift(r,1,i-1){调整r[1]使r[1. .i-1]变成堆} ] ENDP; 6、基数排序(Radix Sorting) 不需要进行关键字之间的比较 借助多关键字排序的思想对单关键字排序 6、1 多关键字

文档评论(0)

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

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

1亿VIP精品文档

相关文档