美文网首页
堆的建立与删除

堆的建立与删除

作者: qratosone | 来源:发表于2016-04-12 00:10 被阅读0次

堆的实现


class Heap {
private:
    int *data, size;
public:
    Heap(int length_input) {
        data = new int[length_input];
        size = 0;
    }
    ~Heap() {
        delete[] data;
    }
    void push(int value){

    }

};

此处实现一个大根堆,根节点的值最大


堆的插入

具体原理略

void push(int value) {
    data[size] = value;
    int current = size;
    int father = (current - 1) / 2;
    while (data[current] > data[father]) {
        swap(data[current], data[father]);
        current = father;
        father = (current - 1) / 2;
    }
    size++;
}

堆的删除与上滤
首先找出当前最大的值——确认其是自身,左孩子还是右孩子
然后进行交换
再从交换后的节点出发,递归调用

void update(int pos,int n){
    int lchild=2*pos+1,rchild=2*pos+2;
    int max_value=pos;
    if(lchild<n&&data[lchild]>data[max_value]){
        max_value=lchild;
    }
    if(rchild<n&&data[rchild]>data[max_value]){
        max_value=rchild;
    }
    if(max_value!=pos){
        swap(data[pos],data[max_value]);
        update(max_value,n);
    }

}
void pop(){
    swap(data[0],data[size-1]);
    size--;
    update(0,size);
}

相关文章

  • 堆的建立与删除

    堆的实现 此处实现一个大根堆,根节点的值最大 堆的插入 具体原理略 堆的删除与上滤首先找出当前最大的值——确认其是...

  • 使用sql语句建立与删除链接服务器及执行数据库操作

    使用sql语句建立与删除链接服务器及执行数据库操作 使用sql语句建立与删除链接服务器及执行数据库操作 建立链接服...

  • SQL入门经典

    豆瓣链接 1 数据库与表的建立,更新及删除 1.1 创建和删除数据库 1.2 创建、更改和删除表 1.3 主键与外...

  • 12.2.4 建立与删除目录

    12.2.4 建立与删除目录 mkdir -- 新建目录语法:bool mkdir (string pathnam...

  • 堆-Heap

    堆-Heap 堆的基本接口设计 二叉堆(最大堆) 大顶堆-添加 大顶堆-删除 删除堆顶元素的同时插入一个新元素 大...

  • 算法导论第6.4章 - 堆排序算法

    伪代码利用了维护堆和建立堆的部分 堆排序 建立堆 维护堆的性质 在建立好的堆里面,根部的元素是最大的,然后把这个最...

  • ElasticSearch语法

    一、索引操作 建立名为“demo”的索引,为分片数与副本数配置默认值 删除“demo”索引 建立“demo”索引同...

  • Linux 文件操作(新增,复制,删除)

    mkdir、rmdir mkdir用来建立新的目录,rmdir用来删除已建立的目录: rmdir 只能删除空文件夹...

  • 剑指offer 数据流中的中位数

    建立大顶堆和小顶堆

  • 堆排序

    堆排序的思路是先要建立堆大根堆:所有父节点比子节点要大小跟堆:所有父节点比子节点小 升序排序先建立大根堆,建立好后...

网友评论

      本文标题:堆的建立与删除

      本文链接:https://www.haomeiwen.com/subject/pcgilttx.html