堆算法

函数 作用
make_heap 构建大顶锥
make_heap(v.begin(), v.end(), greater<int>()); 构建小顶锥
pop_heap 将堆顶元素移动到last-1位置上
push_heap 在加入新元素后,重建堆
sort_heap 排序(从小到大)

示例代码

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    int a[] = {10,20,30,5,15};
    vector<int> v(a,a+5);
    vector<int>::iterator it;

    //make_heap
    make_heap(v.begin(),v.end());
    cout << "make_heap" << endl;
    for(it=v.begin();it!=v.end();it++){
     cout << *it << ' ';
    }
    cout << endl;

    //pop_heap
    cout << "pop_heap" << endl;
    pop_heap(v.begin(),v.end());
    for(it=v.begin();it!=v.end();it++){
     cout << *it << ' ';
    }
    cout << endl;

    //sort_heap
    cout << "sort_heap" << endl;
    sort_heap (v.begin(),v.end());
    for(it=v.begin();it!=v.end();it++){
     cout << *it << ' ';
    }
    cout << endl;
    make_heap(v.begin(),v.end());

    //push_heap
    cout << "re_make_heap" << endl;
    for(it=v.begin();it!=v.end();it++){
     cout << *it << ' ';
    }
    cout << endl;
    v.push_back(99);
    push_heap (v.begin(),v.end());
    cout << "push_heap" << endl;
    for(it=v.begin();it!=v.end();it++){
     cout << *it << ' ';
    }
    cout << endl;
    return 0;
}

结果

图片.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 2. 示例代码 3. 练习
    jdzhangxin阅读 405评论 0 0
  • 二叉堆 二叉堆是一棵完全二叉树,且任意一个结点的键值总是小于或等于其子结点的键值(最小堆)。二叉堆采用数组来存储(...
    leon4ever阅读 3,424评论 0 0
  • 堆的定义如下:n个元素的序列{k0,k1,...,ki,…,k(n-1)}当且仅当满足下关系时,称之为堆。" ki...
    魏成阅读 611评论 0 0
  • 在知乎、简书、豆瓣等平台常看到《要成功先自律》、《有些奖励只有自律之后才得到》、《自律后我的人生就像开挂一样精彩》...
    是舒格阅读 516评论 0 3
  • 千百年了 来来往往的人里 我是不是已经换了很多模样来见你 今天 我又回来了 只是 你还记得我曾经的模样吗 不过 我...
    明波1阅读 611评论 0 4