#include<stdio.h>
#include<algorithm>
#include<limits.h>
int A[10000000];
int d=3;//3叉堆
using namespace std;
//n个元素的d叉堆高度为logd n向下取整(2<=n<=d-1时不成立)
inline int PARENT(int i)
{
return (i-2)/d+1;
}
inline int CHILD(int i,int order)
{//下标i的第order个儿子(1<=order<=d)
return d*(i-1)+order+1;
}
void MAX_HEAPIFY(int A[],int adjust,int heapsize)
{//O(dlogd n)
int adjustkey=A[adjust];//要调整的结点值
for(int largerson=CHILD(adjust,1);largerson<=heapsize;largerson=CHILD(adjust,1)){
while(largerson<heapsize&&A[largerson]<A[largerson+1]) largerson++;//从第1个儿子开始找最大的儿子
if(adjustkey>A[largerson]) break;//不再向下沉
A[adjust]=A[largerson];adjust=largerson;
//逐级下沉。adjust:当前要调整的结点值。largerson:它的大儿子
}
A[adjust]=adjustkey;//到它应到的位置
}
int HEAP_MAXIMUM(int A[])
{//返回最大key。
return A[1];
}
int HEAP_EXTRACT_MAX(
d叉堆 d-ary
最新推荐文章于 2021-08-12 09:36:35 发布
本文介绍了d叉堆的数据结构,包括如何维护最大堆性质、插入元素、删除最大元素等操作。通过C语言代码展示了d叉堆的实现,以及如何逐层打印和验证堆的正确性。
摘要由CSDN通过智能技术生成