第3章排序案例分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
void HeapSort ( SqList H ) { HeapAdjust (H,1,n); //建立初始堆 H.r[1]??H.r[n]; //堆顶元素与最后一个元素交换 for(i=n-1; i1; i--) //连续进行堆调整和交换 { HeapAdjust(H,1,i);  H.r[1]??H.r[i]; } } 问题②的解决--筛选 所谓“筛选”指的是,对一棵左/右子树均为堆的完全二叉树,从根结点到叶子结点依次进行“调整”,使整个二叉树成为一个堆的过程。 方法:进行自上而下的“筛选”:当堆顶与最后一个结点交换后,堆顶的左、右子树都是堆,首先暂存根结点,然后比较左、右子树根的大小,若其中的大者大于双亲,则将他上移至双亲的位置,之后继续往下进行筛选,直至双亲不小于其左、右子树根或左右子树均为空为止,最后将暂存的元素移至合适的位置。 98 81 34 73 56 12 20 39 65 47 R[0] 47 73 65 47 47 81 98 98 81 73 34 65 56 12 20 39 47 98 81 47 81 47 73 65 47 算法 6.14:已知L.r[s..m]中记录的关键字除L.r[s].key之外均满足堆的定义,本函数依据关键字的大小对L.r[s]进行调整,使L.r[s..m]成为一个大顶堆(对其中记录的关键字而言) void HeapAdjust (SqList L, int s, int m) { RcdType rc = L.r[s]; // 暂存根结点的记录 for ( int j=2*s; j=m; j*=2 ) //当s的左右孩子存在时 { // 沿key较大的孩子结点向下筛选 if ( jm L.r[j].keyL.r[j+1].key ) ++j; // j为较大孩子下标 if ( rc.key = L.r[j].key ) break; // 不需要调整 L.r[s] = L.r[j]; s = j; // 把关键字较大记录往上调 } L.r[s] = rc; // 回移筛选下来的记录 } // HeapAdjust 时间复杂度为:O(log2n) 问题①的解决 对初始序列,进行“自下而上”的筛选。由于含n个结点的完全二叉树中最后n-n/2个元素为叶子结点;每个叶子结点均为堆,则只要从最后一个有子树的结点,即n/2个结点起直到根结点一一筛选调整,即可将一无序序列建成一个大顶堆。 for ( i=L.length/2; i0; --i ) // 把L.r[1..L.length]建成大顶堆 HeapAdjust (L, i, L.length); 40 55 73 12 98 27 40 98 73 12 55 27 98 55 73 12 40 27 27 98 12 73 55 40 27 40 12 73 55 98 原始序列: 40 73 98 27 55 12 98 55 40 55 98 大顶堆: 34 39 20 65 47 12 98 73 81 56 56 47 81 65 98 20 81 73 39 98 34 “自下而上”筛选建堆过程 算法 6.15:对顺序表L进行堆排序 void HeapSort (SqList L ) { RcdType w; int n=L.length; for (int i=n/2; i0; --i ) HeapAdjust ( L, i, n ); //从第一个有子树的结点起,把L.r[1..L.length]建成大顶堆 w=L.r[1] ; L.r[1]= L.r[n]; L.r[n]=w; //交换“堆顶”和“堆底”的记录 for ( i=n-1; i1; --i ) { HeapAdjust(L, 1, i); // 从根开始调整,将L.r[1..i] 重新调整为大顶堆 w=L.r[1]; L.r[1]=L.r[i]; L.r[i]=w; // 将堆顶记录和当前的“堆底”记录相互交换 使已有序

文档评论(0)

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

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

1亿VIP精品文档

相关文档