当前位置: 首页 > news >正文

3.序列式容器-heap

接着再讲另一种容器-。主要包括建堆、维护堆和堆排序。以大根堆为例,图解如下:

heap:
make_heap();
push_heap();
pop_heap();
sort_heap();

①生成一个大根堆(从第一个非叶子结点开始调整堆)
以vector vec={0,1,2,3,4,8,9,3,5};为例。因为heap底层容器是可以随机访问的如vector,因此找到第一个非叶子结点非常简单,只需要(size/2)-1就可以获取需要调整的索引下标。
生成堆动态调整的过程:
在这里插入图片描述
最后结果:
在这里插入图片描述

②往堆里面添加值并调整堆在这里插入图片描述
③从堆中弹出值并重新调整堆
在这里插入图片描述
在这里插入图片描述
堆排序就是重复对每个元素执行③的过程,因为每次弹出堆都会确定一个当前堆的最大值。如此重复下去就会获取一个升序序列,这也就是堆排序的一个完整过程。
可执行代码:

//
// Created by wsk on 25-10-23.
//
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;
int main()
{int a[9] = {0,1,2,3,4,8,9,3,5};vector<int> vec(a,a+9);make_heap(vec.begin(),vec.end());// 生成一个堆 9 5 8 3 4 0 2 3 1for (int i =0 ;i<vec.size();i++){cout<<vec[i]<<" ";}cout<<endl;vec.push_back(7);push_heap(vec.begin(),vec.end());// 往堆里面加入一个元素 9 7 8 3 5 0 2 3 1 4for (int i =0 ;i<vec.size();i++){cout<<vec[i]<<" ";}cout<<endl;pop_heap(vec.begin(),vec.end());// 从堆里弹出一个元素,假弹出放在vec的末尾,重新维护堆 8 7 4 3 5 0 2 3 1cout<<vec.back()<<endl;vec.pop_back();// 真正的把堆里的元素弹出// cout << vec.size() << endl;for (int i =0 ;i<vec.size();i++){cout<<vec[i]<<" ";}cout<<endl;sort_heap(vec.begin(),vec.end());// 堆排序 0 1 2 3 3 4 5 7 8for (int i =0 ;i<vec.size();i++){cout<<vec[i]<<" ";}cout<<endl;return 0;
}
http://www.dtcms.com/a/519592.html

相关文章:

  • Module JDK is not defined 警告解决
  • 柞水县住房和城乡建设局网站网站建设客户分析调查表文档
  • html`contenteditable`
  • 【语音识别】语音识别的发展历程
  • 【C++ 类与对象 (下)】:进阶特性与编译器优化的深度实战
  • 加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
  • 怎么在服务器建立网站wordpress getcategorylink
  • uniapp textarea标签 在ios真机上出现高度拉长问题
  • cpp language 语法
  • uni-app 入门学习教程,从入门到精通,uni-app 企业项目实战:鲁嗑瓜子项目开发知识点(9)
  • uni-app小程序往飞书多维表格写入内容(包含图片)
  • 【uniapp】App平台展示pdf文件
  • Jenkins Pipeline 中使用 GitLab Webhook 触发任务执行
  • 【课堂笔记】概率论-2
  • 自建企业级演示中心:不用租Office,PPTist+cpolar方案实测
  • ubuntu22+postgresql18启动报错
  • 如何做好电商网站平面设计wordpress接入翼支付宝
  • 网站 建设初步下载安装wordpress 主题
  • numpy 广播详解(Broadcasting)​​
  • 【数据结构】 [特殊字符] 顺序表详解——数据结构的第一块基石
  • 企业级安全运营中心(SOC)建设实战:从威胁检测到自动化响应
  • 分布式存储Ceph与OpenStack、RAID的关系
  • “五金件自动化上下料”革新:人形机器人如何重塑柔性制造
  • 多线程六脉神剑第二剑:监视器锁 (Monitor)
  • 飞书多维表格自动化做音视频文案提取,打造素材库工作流,1分钟学会
  • 基于主题聚类的聊天数据压缩与智能检索系统
  • 结构健康自动化监测在云端看数据变化,比人工更及时精准,优缺点分析?
  • 做夹具需要知道的几个网站服装页面设计的网站
  • 分享影视资源的网站怎么做网站字头优化
  • 照明回路配线-批量测量超实用