堆排序代码模板

 

 

#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为三个点中最小的那个点//如果左儿子存在并且小于根节点就将左儿子赋值给tif (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.mzph.cn/news/108673.shtml

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

相关文章

什么是著作权?对此你了解多少?

在当今信息爆炸的时代&#xff0c;著作权成为一个备受关注的话题。创作是人类文明的重要组成部分&#xff0c;而著作权是创作者对自己作品的劳动和智慧的一种保护。很多人还不太了解著作权&#xff0c;那么希望看完此文&#xff0c;你会对它有一个新的认识。 一、著作权的概念 …

Java —— 运算符

目录 1. 什么是运算符 2. 算术运算符 2.1 基本四则运算符: 加减乘除模( - * / %) 2.2 增量运算符 - * %与 自增/自减运算符 -- 3. 关系运算符 4. 逻辑运算符 4.1 逻辑与 && 4.2 逻辑或|| 4.3 逻辑非 ! 4.4 短路求值 5. 位运算符 5.1 按位与 & 5.2 按位或 5.3 按位…

Kotlin let run with apply also 关键字

Kotlin let run with apply also 关键字 参考官网学习资料 https://play.kotlinlang.org/byExample/06_scope_functions/ 一、 let Kotlin 标准库函数 let 可用于范围界定和空检查。当在对象上调用时&#xff0c;let 执行给定的代码块并返回其最后一个表达式的结果。该对象可…

AutoCAD 2024:计算机辅助设计(CAD)软件中文版

AutoCAD是一款广受全球设计师和工程师欢迎的计算机辅助设计&#xff08;CAD&#xff09;软件。自1982年首次推出以来&#xff0c;AutoCAD已经经历了多次迭代和改进&#xff0c;不断提升用户在产品设计、建造和工程领域的工作效率。现在&#xff0c;让我们一起探索AutoCAD 2024的…

NAT网关在阿里云的应用

NAT网关&#xff08;Network Address Translation Gateway&#xff09;是一种网络地址转换服务&#xff0c;提供NAT代理&#xff08;SNAT和DNAT&#xff09;能力。NAT是用于在本地网络中使用私有地址&#xff0c;在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决I…

高性能服务器之mysql数据库连接池设计与实现

高性能服务器之mysql数据库连接池设计与实现 链接&#xff1a;https://pan.baidu.com/s/1ISZ1Sy087GUeaekW3sV_oA?pwd0t9q 内存泄漏 链接&#xff1a;https://pan.baidu.com/s/1AWPnbuzVSpoP-CnEgJk5hg?pwdaieq 提取码&#xff1a;aieq 线程池 链接&#xff1a;https://pan…

SamSung三星笔记本NP930QCG-K02CN原装出厂OEM预装Win10系统

下载链接&#xff1a;https://pan.baidu.com/s/13GsR_r9caJkLjiWWaXa30Q?pwdncp9 系统自带指纹驱动、声卡,网卡,显卡等所有驱动、三星出厂时主题壁纸、系统属性三星专属LOGO标志、Office办公软件等三星出厂时自带的预装程序 由于时间关系,绝大部分资料没有上传&#xff0c;不…

CS鱼饵制作

文章目录 宏病毒&#xff08;宏钓鱼&#xff09;快捷方式钓鱼shellQMaker bug伪装pdf文件上线 宏病毒&#xff08;宏钓鱼&#xff09; 启动teamsever服务器&#xff0c;具体过程请参考我之前的文章&#xff1a; 在主机中启动CS客户端&#xff0c;111是真实机的用户&#xff1a…

Spring底层核心原理解析

Bean的创建过程 简易图&#xff1a; service.class–>无参构造方法(推断构造方法)–>对象–>依赖注入(有Autowired的属性赋值)–>初始化前(postConstruct)–>初始化(implement InitializationBean)–>初始化后(AOP)–>代理对象–>Bean 重要的两个属…

【Mysql】Innodb数据结构(四)

概述 MySQL 服务器上负责对表中数据的读取和写入工作的部分是存储引擎 &#xff0c;而服务器又支持不同类型的存储引擎&#xff0c;比如 InnoDB 、MyISAM 、Memory 等&#xff0c;不同的存储引擎一般是由不同的人为实现不同的特性而开发的&#xff0c;真实数据在不同存储引擎中…

推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。

文章目录 &#x1f31f; 离线评估&#xff1a;常用的推荐系统离线评估方法有哪些&#xff1f;&#x1f34a; 1. RMSE/MSE&#x1f34a; 2. MAE&#x1f34a; 3. Precision/Recall/F1-score&#x1f34a; 4. Coverage&#x1f34a; 5. Personalization&#x1f34a; 6. AUC &…

【Linux】【创建文件】Linux系统下在命令行中创建文件的方法

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Linux技术&…

Linux:mongodb数据逻辑备份与恢复(3.4.5版本)

我在数据库aaa的里创建了一个名为tarro的集合&#xff0c;其中有三条数据 备份语法 mongodump –h server_ip –d database_name –o dbdirectory 恢复语法 mongorestore -d database_name --dirdbdirectory 备份 现在我要将aaa.tarro进行备份 mongodump --host 192.168.254…

[uni-app] canvas绘制圆环进度条

文章目录 需求参考链接基本问题的处理1:画布旋转的问题2:注意arc()的起始位置是3点钟方向3: 如果绘制1.9*Matn.PI的圆环, 要保证其实位置在0点方向?4:小线段怎么画, 角度怎么处理? 源码 需求 要绘制一个如此的进度条 参考链接 uni-app使用canvas绘制时间刻度以及不显示问…

华纳云:怎么判断VPS的ip是不是公网ip

要判断一个VPS的IP地址是否为公网IP&#xff0c;您可以执行以下步骤&#xff1a; 查看IP地址&#xff1a; 首先&#xff0c;获取您的VPS的IP地址。您可以使用以下命令来查看VPS的IP地址&#xff1a; curl ifconfig.me 或 curl ipinfo.io/ip 这些命令将显示VPS的公网IP地址。 检…

el-table的formatter属性的使用方法

一、formatter是什么&#xff1f; formatter是el-table-column的一个属性&#xff0c;用来格式化内容。&#xff08;比如后台给你返0或1&#xff0c;你需要展示成“否”和“是”&#xff09; 二、详细使用 1.知道formatter之前&#xff1a; 代码如下&#xff08;示例&#…

Cesium Vue(三)— 相机配置

1. 坐标系转换 1.1 cesium使用到的坐标系 屏幕坐标系&#xff0c;二维的笛卡尔坐标系&#xff0c;API > Cartesian2地理空间坐标系&#xff0c;WGS-84坐标系&#xff0c; API > Cartographic(经度&#xff0c;维度&#xff0c;高度)三维笛卡尔空间直角坐标系&#xff0…

leetcode-279. 完全平方数

1. 题目链接 链接: 题目链接 2. 解答 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>bool issquare(int n) {if (n 1 || n 4) return true;if (n 2 || n 3) return false;for (int i 3; i < n/2; i ) {if (n i*i) return true;}…

react使用echarts图表

要在React中使用Echarts图表库&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你的React项目已经安装了Echarts库。可以通过运行以下命令来安装Echarts npm install echarts --save在你的组件文件中&#xff0c;导入Echarts库&#xff1a; import ech…

黑马程序员Java Web--14.综合案例--删除品牌功能实现

一、BrandMapper 添加删除单个数据的函数和sql语句 Delete("delete from tb_brand where id#{id}")void deleteById(int id);二、BrandService 定义一个删除单个数据的接口 void deleteById(int id);三、BrandServiceImpl 在BrandServiceImpl重写deleteById方法&a…