heap
文章目录
- 原理
- 实现
原理
堆是一种数状数据结构,若是满足以下特性,即可称为堆:“给定堆中任意节点 P 和 C,若 P 是 C 的母节点,那么 P 的值会小于等于(或大于等于) C 的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆(min heap);反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆(max heap)。在堆中最顶端的那一个节点,称作根节点(root node),根节点本身没有母节点(parent node)。
这里,我们主要讨论二叉堆。
存储结构
完全二叉树的顺寻存储结构
- 逻辑定义
n个元素序列{k1, k2… ki…kn},当且仅当满足下列关系时称之为堆:
(ki <= k2i, ki <= k2i+1)或者(ki >= k2i, ki >= k2i+1), (i = 1, 2, 3, 4… n/2)
实现
void adjustDown(int a[], int size, int k) {
int tmp = a[k];
for (int i = 2 * k; i < size; i *= 2) {
if (i + 1 < size && a[i] < a[i+1])
i++;
if (a[k] >= a[i]) break;
else {
a[k] = a[i];
k = i;
}
}
a[k] = tmp;
}
void adjustUp(int a[], int k) {
int loc = k - 1;
int tmp = a[loc];
int i = loc / 2;
while(i >= 0 && a[i] < tmp) {
a[loc] = a[i];
loc = i;
i = loc / 2;
}
a[loc] = tmp;
}
void buildMaxHeap(int a[], int size) {
for (int i = (size - 1) / 2; i >= 0; i--)
adjustDown(a, size, i);
}
文章最后发布于: 2019-02-05 21:37:12
相关阅读
IXWebHosting域名转至NameCheap教程(一)
正好我同事在IXWebHosting主机中的免费域名还有几天就要到期,他希望转出到其他域名注册商来,让我给他操作。正好我可以把转出教程写
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。 算法分析 在学习堆排序之前我们要先
五、完成Godaddy域名转出操作1、填写了“域名授权转移码”后,你的注册邮箱会收到Namecheap发来的邮件,需要确认这一转入
二、各大域名商域名转入价格1、Godaddy域名直接续费的价格实在是太贵了,于是想到将Godaddy的域名转出到其它的域名商。以下是Namch