堆排序代码模板

news2025/7/12 11:35:10

 

 

#include<iostream>
using namespace std;
const int N = 1e5 + 9;
int h[N], n, m, Size;//小根堆

//u表示三个点中的根节点
void down(int u)
{
	int t = u;//设t为三个点中最小的那个点
	//如果左儿子存在并且小于根节点就将左儿子赋值给t
	if (u * 2 <= Size && h[u * 2] < h[t]) t = u * 2;
	//右儿子
	if (u * 2 + 1 <= Size && h[u * 2 + 1] < h[t]) t = u * 2 + 1;
	//如果传入的节点不是最小值就交换
	if (u != t)
	{
		swap(h[u], h[t]);
		down(t);//将原本的根节点沉下来
	}
}

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n >> m;
	//开始创建堆的时候,元素是随机插入的,所以不能从根节点开始down
	//而是要找到满足下面三个性质的结点:
	//1.左右儿子满足堆的性质。
	//2.下标最大(因为要往上遍历)
	//3.不是叶子节点(叶子节点一定不满足堆的性质)
	for (int i = 1; i <= n; ++i) cin >> h[i];
	Size = n;
	//时间复杂度为O(n)
	//在堆中,每个节点的左子节点的下标为2i,右子节点的下标为2i+1
	//假设堆中有n个节点,下标从1到n。我们知道叶子节点是没有子节点的
	//所以最后一个非叶子节点的下标一定小于等于n/2。
	//首先要明确要进行down操作时必须满足左儿子和右儿子已经是个堆
	for (int i = n / 2; i; --i) down(i);
	//应该是不能从头往下down吧,down操作是把小数扔上来
	//大数扔下去,从头往下down把第一个三角里的最小值扔到第一个位置
	//就不再管他了,但是并不能保证其能小于剩下的所有值
	//但从下往上down可以保证建堆时全部点完全从小到大
	//for (int i = 1; i <= n; i++) down(i);//错误
	//for (int i = n; i >= 0; i--) down(i);//正确
	//for (int i = n / 2; i >= 0; i--) down(i);//也正确
	while (m--)
	{
		//本题输出最小值需要删除前面的最小值
		//原本查询最小值只需要h[1],但是现在是前m个数
		//所以需要用到删除第一个数的方法
		cout << h[1] << " ";
		h[1] = h[Size--];
		down(1);//将原本在最后的节点往下沉
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1103265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SourceTree 这是一个无效的源路径/URL

原因&#xff1a;权限检测出现问题 解决&#xff1a; ssh-add /Users/haijunyan/.ssh/id_rsa ssh-add -K /Users/haijunyan/.ssh/id_rsa 稍后&#xff0c;重新测试&#xff1a; 备注&#xff1a; https://www.ngui.cc/el/1727107.html?actiononClick

哪些企业适合做私域?

什么是私域&#xff1f; 简单直白来说&#xff0c;就是不用花钱就可以触达客户的渠道。私域流量就是私人的流量&#xff08;不用花钱&#xff09;。 哪些企业适合做私域&#xff1f; 》复购率高 比如美妆护肤产品行业、餐饮等快消品行业。 可通过群发推广消息、朋友圈营销和在…

01案例 - 财政收入影响因素分析及预测模型

01案例 - 财政收入影响因素分析及预测模型 案例背景 在我国现行的分税制财政管理体制下&#xff0c;地方财政收人不仅是国家财政收入的重要组成部分&#xff0c;而且具有其相对独立的构成内容。如何有效的利用地方财政收入&#xff0c;合理的分配&#xff0c;来促进地方的发展…

React create-react-app 里配置代理(解决跨域)

配置代理&#xff1a; creact-react-app v5 当然不是v5 下面的方法也适用。 方式一&#xff1a;package.json里配置 其实 cra里给了个简单的配置代理 就是在package.json里加上proxy就行了。 修改时需要 npm start重新运行一下&#xff0c;要不然可能不生效。 proxy只能以 h…

vueday02——使用naive-ui做一个ACM看榜

效果展示&#xff1a; 组件导入 <n-data-table:data"data":columns"column":bordered"true":single-line"false"/> 行数据导入数据结构 {key: 1,index: 2,name: user Name2,passNum:0,// age: 42,college: JiShou University…

Java RSA密钥从RSAPrivateKey和RSAPublicKey对象中,分别提取模和指数

概述&#xff1a; 在Java编程中&#xff0c;我们经常用到如下一段代码来生成RSA公私钥&#xff0c;分别拿到公私钥然后加解密计算&#xff1a; KeyPairGenerator keyPairGen; keyPairGen KeyPairGenerator.getInstance("RSA"); keyPairGen.initialize(2048, new S…

竞赛选题 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习YOLO抽烟行为检测 该项目较为新颖&#xff0c;适合作为竞赛课…

C-Net:用于乳腺超声图像分割的具有全局指导和细化残差的级联卷积神经网络

C-Net 期刊分析摘要贡献方法整体框架1. Bidirectional attention guidance network (BAGNet)2. Refinement residual network (RFNet) 实验1. 对比实验2. 消融实验 可借鉴参考 期刊分析 期刊名&#xff1a; Computer Methods and Programs in Biomedicine 期刊信息&#xff1a…

圣树唤歌最强阵容2023,圣树唤歌阵容推荐

无疑圣树唤歌作为一款备受欢迎的手机游戏&#xff0c;其深刻的战斗系统一直以来都受到大家的追捧。在这个虚拟世界中胜利的关键在于组建一支无懈可击的强大队伍&#xff0c;要想成为强者&#xff0c;就必须拥有最强阵容。 关注【娱乐天梯】&#xff0c;获取内部福利号 在本篇攻…

【C++11新特性】右值引用和移动语义(移动构造,移动赋值)

文章目录 前言一、列表初始化&#xff08;不同于初始化列表&#xff09;二、initializer_list三、decltype关键字四、nullptr五、右值引用移动拷贝和移动赋值被编译器识别成将亡值的原因 左值引用和右值引用的场景和价值右值引用的场景move函数 六、关于右值引用的功能和属性问…

【HTML+CSS】零碎知识点

公告滚动条 <!DOCTYPE html> <html><head><title>动态粘性导航栏</title><style>.container {background: #00aeec;overflow: hidden;padding: 20px 0;}.title {float: left;font-size: 20px;font-weight: normal;margin: 0;margin-left:…

23款奔驰C260L升级小柏林音响 15个喇叭 是多了哪两个

22款奔驰C级在音响系统方面也做出了改变&#xff0c;20款奔驰C级的小柏林音响是13喇叭590瓦功率&#xff0c;小柏林音响是多了哪两个喇叭呢&#xff1f;也就是眼镜盒上的两个&#xff0c;在之前的C级车型上&#xff0c;小柏林是没有这两个扬声器的。无论是小柏林还是大柏林&…

凉鞋的 Godot 笔记 201. 第三轮循环:引入变量

201. 第三轮循环&#xff1a;引入变量 在这一篇&#xff0c;我们进行第三轮 编辑-测试 循环。 在之前我们编写了 输出 Hello Godot 的脚本&#xff0c;如下: extends Node# Called when the node enters the scene tree for the first time. func _ready():print("Hell…

MySQL——六、库表操作(下篇)

MySQL 一、INSERT语句二、REPLACE语句三、UPDATE语句四、delete和TRUNCATE语句五、MySQL用户授权1、密码策略2、用户授权和撤销授权 一、INSERT语句 #在表里面插入数据&#xff1a;默认情况下&#xff0c;一次插入操作只插入一行 方式1&#xff1a; INSERT [INTO] 表名 [(colu…

word如何设置页码?教你快速提升文档颜值!

在创建文档时&#xff0c;为了更好地组织内容&#xff0c;页码是一个必不可少的元素。但是很多人不知道word如何设置页码&#xff0c;其实word提供了多种设置页码的方法&#xff0c;以满足不同文档的需求。本文将详细介绍3种设置页码的方法&#xff0c;无论您是初学者还是有经验…

【数据结构】排序--快速排序

目录 一 概念 二 快速排序的实现 1. hoare版本 (1)代码实现 (2)单趟排序图解 (3) 递归实现图解 (4)细节控制 (5)时间复杂度 (6)三数取中优化 2 挖坑法 (1)代码实现 (2)单趟图解 3 前后指针法 (1) 代码实现 (2) 单趟图解 ​编辑4 优化子区间 5 非递归快速排…

零基础Linux_18(进程间通信)共享内存+消息队列+信号量

目录 1. 共享内存 1.1 共享内存概念 1.2 系统函数shmget 1.2.1 key值和ftok 1.2.2 sizeshmflg返回值 1.3 系统调用shmctl 1.4 系统调用shmat和shmdt 1.5 共享内存进程间通信前期代码 1.6 共享内存进程间通信 2. 消息队列(了解) 3. 信号量(了解) 4. 笔试选择题 答案…

git的介绍和安装、常用命令、忽略文件、分支

git介绍和安装 首页功能写完了 ⇢ \dashrightarrow ⇢ 正常应该提交到版本仓库 ⇢ \dashrightarrow ⇢ 大家都能看到这个 ⇢ \dashrightarrow ⇢ 运维应该把现在这个项目部署到测试环境中 ⇢ \dashrightarrow ⇢ 测试开始测试 ⇢ \dashrightarrow ⇢ 客户可以看到目前做的…

137. 只出现一次的数字 II (中等。位运算)

不会做&#xff0c;思路来自官解 对于每一位来说&#xff0c;每个数字只能是 0 或 1&#xff0c;如果所有数字的第 i 位和能被3整除&#xff0c;那么表示只出现一次的这个元素在这一位上为0&#xff0c;反之就是1 class Solution:def singleNumber(self, nums: List[int]) -&g…