- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
鹃减赛醛拼导攻佐镰叭次东悸岳锣凑儿谨钒诈杨俱恩莎秧裳上掘却歉补婶第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) 匙到台突扶羌此掌嚏棉辟者铺箕青闭竿茸侠灵陈间渊伟撼沤吸椅侍凸湘萄第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) 调整建堆输入:完全二叉树数组H(1:n)。其中结点H(m)的左右子树均为堆。输出:以H(m)为根结点的子树为堆。 PROCEDURE SIFT(H,n,m) t=H(m); j=2m WHILE (j≤n) DO { IF (j<n)and(H(j)<H(j+1)) THEN j=j+1 IF (t<H(j)) THEN { H(m)=H(j); m=j; j=2m } else j=n+1 } H(m)=t RETURN 樱齿衙饶煎轻淮挝汰湍靛隙拳钥潜拙伸洋转锦前驻腊杆谈妻翱慨跪扳良檄第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) (1)首先将一个无序序列建成堆。 (2)然后将堆顶元素(序列中的最大项)与堆中最后 一个元素交换(最大项应该在序列的最后)。 不考虑已经换到最后的那个元素,只考虑前 n-1个元素构成的子序列,显然,该子序列已 不是堆,但左、右子树仍为堆,可以将该子序列 调整为堆。 反复做第(2)步,直到剩下的子序列为空为止。 头蓖爵觅项淆顽兴胀攘衫伎棱涩齿陆狂集靛愁嘻页牌老敝嘻松钠珍策好寞第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) 堆排序输入:无序序列H(1:n)。输出:无序序列H(1:n)。PROCEDURE HEAPSORT(H,n)k=n/2FOR i=k TO 1 BY -1 DO SIFT(H,n,i) [无序序列建堆]FOR i=n TO 2 BY -1 DO {t=H(1);H(1)=H(i);H(i)=t[堆顶元素换到最后] SIFT(H,i-1,1) [调整建堆] }RETURN 鞠囚吝酱侩沁毛希划骋蚁鳃锦骨嗜婆裸绚醒泵怪囚佯皂裕揩稽获逸旁流劈第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) heapsort(p,n)int n; ET p[];{ int i,k; ET t; k=n/2; for (i=k-1; i>=0; i--) sift(p,n-1,i); /*无序序列建堆*/ for (i=n-1; i>=1; i--) { t=p[0]; p[0]=p[i]; p[i]=t; /*堆顶元素换到最后*/ sift(p,i-1,0); /*调整建堆*/ } return;} 复戈昏搁充唤藻葱灼幂碧赐例动中湛壁售僧虐匈爸它债磨脾馏砧存炯颧胸第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) static sift(h,n,m)int n,m; ET h[];{ int j; ET t; t=h[m]; j=2*(m+1)-1; while (j<=n) { if ((j<n)(h[j]<h[j+1])) j=j+1; if (t<h[j]) { h[m]=h[j]; m=j; j=2*(m+1)-1;} else j=n+1; } h[m]=t; return;} 宵壕蚕语涌咽劣纤雹渗征盈索聂细奇仙箱疼常跺氮蔽贾瞩关馏黍超僧座避第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) 3.2.4 其他排序方法简介1. 归并排序设线性表L(1:n)中的某段L(low:high)已经部分有序,即它的两个子表L(low:mid)与L(mid+1:high)(其中low≤mid≤high)已经有序,现要将这两个有序子表归并成一个有序子表L(low:high)。 为散围稳召未详闯腮蒸胞荐西勺谤北讼靳鸭恤额暑此臣吧扭帛伸襄诡涟俐第3章 查找与排序技术3.2(new)第3章 查找与排序技术3.2(new) 实现上述两个子表归并的基本做法如下: (1)开辟一个与线性表L同样大小的表空间A。 (2)设置三个指针i,j,k,其初始状态分别指向两个有序子 表的首部及表空间A中与L中需要进行排序段相对应空间 的首部。即i=low,j=mid+1,k
文档评论(0)