📄 9_8.txt
字号:
void sift(RecordType r[], int k, int m)
/* 假设r[k..m]是以r[k]为根的完全二叉树,且分别以r[2k]和r[2k+1]为根的左、右子树为大根堆,调整r[k],使整个序列r[k..m]满足堆的性质 */
{
RecordType t;
int i,j;
int x;
int finished;
t= r[k]; /* 暂存"根"记录r[k] */
x=r[k].key;
i=k;
j=2*i;
finished=FALSE;
while( j<=m && !finished )
{
if (j<m && r[j].key< r[j+1].key )
j=j+1; /* 若存在右子树,且右子树根的关键字大,则沿右分支"筛选" */
if ( x>= r[j].key)
finished=TRUE; /* 筛选完毕 */
else
{
r[i] = r[j];
i=j;
j=2*i;
} /* 继续筛选 */
}
r[i] =t; /* r[k]填入到恰当的位置 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -