堆排序代码模板

 

 

#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 按位…

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…

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…

【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: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绘制时间刻度以及不显示问…

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;}…

笔记本Win10系统一键重装操作方法

笔记本电脑已经成为大家日常生活和工作中必不可少的工具之一&#xff0c;如果笔记本电脑系统出现问题了&#xff0c;那么就会影响到大家的正常操作。这时候就可以考虑给笔记本电脑重装系统了。接下来小编给大家介绍关于一键重装Win10笔记本电脑系统的详细步骤方法。 推荐下载 系…

ftp靶机_获取shell

ftp靶机_获取shell 文章目录 ftp靶机_获取shellftp概念实验环境信息探测 发现漏洞优化shell ftp概念 FTP 是File Transfer Protocol(文件传输协议)的英文简称&#xff0c;而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时&#xff0c;它也是一个应用程序(…

自动化测试框架指南

目录 定义测试自动化 不同类型的框架 以工具为中心的框架 面向项目的框架 关键字驱动的框架 完美测试自动化框架的主要组件 测试库 单元测试 集成和端到端测试 行为驱动开发 测试数据管理 mock&#xff0c;Stubs和虚拟化 实施模式的通用机制 测试结果报告 CI平台…

Java系列 | 如何讲自己的JAR包上传至阿里云maven私有仓库【云效制品仓库】

什么是云效 云效是云原生时代一站式 BizDevOps 平台&#xff0c;产研数字化同行者&#xff0c;支持公共云、专有云和混合云多种部署形态&#xff0c;通过云原生新技术和研发新模式&#xff0c;助力创新创业和数字化转型企业快速实现产研数字化&#xff0c;打造“双敏”组织&…

mysql——面试题初体验

查询环境 1、student&#xff08;学生表&#xff09; 2、课程表(course) 3、教师表(teacher) 4、成绩表(score) 问题 (1) 查询所有学生的学号、姓名、选课数、总成绩 mysql> select s.s_id as 学号,s.s_name as 姓名 from student as s; ---------------- | 学号 | 姓名…

对称(镜像)二叉树

之前写的比较两棵树是否相等&#xff0c;是左子树和左子树比&#xff0c;右子树和右子树比——利用这个思想镜像二叉树就是从第二层的两个节点作为两棵树的根&#xff0c;然后比较&#xff0c;这里的比较是左子树和右子树比&#xff0c;右子树和左子树比 ——也就是利用比较两个…

解决 MyBatis 一对多查询中,出现每组元素只有一个,总组数与元素数总数相等的问题

文章目录 问题简述场景描述问题描述问题原因解决办法 问题简述 笔者在使用 MyBatis 进行一对多查询的时候遇到一个奇怪的问题。对于笔者的一对多的查询结果&#xff0c;出现了这样的一个现象&#xff1a;原来每个组里有多个元素&#xff0c;查询目标是查询所查的组&#xff0c;…

搭建Atlas2.2.0 集成CDH6.3.2 生产环境+kerberos

首先确保环境的干净&#xff0c;如果之前有安装过清理掉相关残留 确保安装atlas的服务器有足够的内存&#xff08;至少16G&#xff09;&#xff0c;有必要的hadoop角色 HDFS客户端 — 检索和更新Hadoop使用的用户组信息&#xff08;UGI&#xff09;中帐户成员资格的信息。对调…