必威体育Betway必威体育官网
当前位置:首页 > IT技术

Heap 的原理与实现

时间:2019-11-01 05:15:38来源:IT技术作者:seo实验室小编阅读:70次「手机版」
 

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主机中的免费域名还有几天就要到期,他希望转出到其他域名注册商来,让我给他操作。正好我可以把转出教程写

排序算法之堆排序(Heap Sort)——C语言实现

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。 算法分析 在学习堆排序之前我们要先

Godaddy域名续费优惠码问题 转至Namecheap

五、完成Godaddy域名转出操作1、填写了&ldquo;域名授权转移码&rdquo;后,你的注册邮箱会收到Namecheap发来的邮件,需要确认这一转入

Godaddy域名续费优惠码问题 转至Namecheap

二、各大域名商域名转入价格1、Godaddy域名直接续费的价格实在是太贵了,于是想到将Godaddy的域名转出到其它的域名商。以下是Namch

分享到:

栏目导航

推荐阅读

热门阅读