正在加载图片...
void adjust(struct node r[m+ll, int m) /*将文件(r[1]r{2],….,rm])解释为一棵顺序二叉树将其中以r[为根结点的二叉树调 为一个堆,设以[为根的二叉树的左,右子树已是堆,1≤≤1[m/2]* X=r[]j=2*i; /*求出r[的左孩子2*1,即r订* while(<=m)/有左孩子* f if (<m)&&(r].key<r[+l].key)) *比较左、右孩子* F=j+1;/*左孩子<右孩子* if(x key<rail.key) *比较根结点和它的大孩子* {r[i]=r[]; /*大孩子上移到它的双亲位置* i=j;/*今r为根结点* *求出左孩子* else j=m+ *根不小于它的任一孩子时,强迫退出 while 循环* *将存放在ⅹ 中的根结点放到r[订中*void adjust(struct node r[m+1],int m) /* 将文件(r[1],r[2],…,r[m])解释为一棵顺序二叉树,将其中以r[i]为根结点的二叉树调 整 为一个堆,设以r[i]为根的二叉树的左,右子树已是堆,1≤i≤1[m/2] */ { x=r[i];j=2*i; /*求出r[i]的左孩子r[2*i],即r[j] */ while (j<=m) /*有左孩子*/ { if ((j<m) &&(r[j].key<r[j+1].key)) /*比较左、右孩子*/ j=j+1; /*左孩子<右孩子*/ if (x.key<r[j].key) /*比较根结点和它的大孩子*/ { r[i]=r[j]; /*大孩子上移到它的双亲位置*/ i=j; /*今 r[j]为根结点*/ j=2*i; /*求出左孩子*/ } else j=m+1 /*根不小于它的任一孩子时,强迫退出while 循环*/ } r[i]:=x; /*将存放在x 中的根结点放到r[i]中*/ }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有