PriorityQueue UpFilter(int P, PriorityQueue H)
{
/*從P處開始上濾*/
/*如果父節點大於子節點*/
/*那麼父節點下移*/
int i;
ElementType tmp;
tmp = H->Elements[P];
for (i = P; H->Elements[i / 2] > tmp; i /= 2)
H->Elements[i] = H->Elements[i / 2];
H->Elements[i] = tmp;
return H;
}
/*下濾*/
PriorityQueue DownFilter(int P, PriorityQueue H)
{
int i;
int Child;
ElementType tmp;
tmp = H->Elements[P];
for (i = P; i < H->size; i = Child)
{
Child = i * 2;
if (Child <= H->size)
{
if (Child != H->size &&
H->Elements[Child] > H->Elements[Child + 1])
Child++;
if (H->Elements[Child] < H->Elements[P])
{
H->Elements[P] = H->Elements[Child];
}
else
break;
}
else
break;
}
H->Elements[i] = tmp;
return H;
}
二叉堆的上滤和下滤
最新推荐文章于 2022-07-07 18:28:15 发布