堆排序(算法题)

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;const int N = 100010;  // 堆数组的最大容量
int h[N], s;           // h[]存储堆元素,s表示当前堆的大小// 下沉操作:调整以i为根的子树,维护小顶堆性质
void down(int i) {int t = i;  // t记录当前节点及其子节点中的最小值位置// 检查左子节点(2*i)是否存在,若更小则更新tif (2 * i <= s && h[i] > h[2 * i]) t = 2 * i;// 检查右子节点(2*i+1)是否存在,且是否比当前t位置的更小if (2 * i + 1 <= s && h[t] > h[2 * i + 1]) t = 2 * i + 1;// 若t发生变化,说明需要交换并继续调整if (t != i) {swap(h[t], h[i]);  // 交换当前节点与更小的子节点down(t);           // 递归调整交换后的子树}
}int main() {int n, m;cin >> n >> m;        // 输入元素总数n和需要输出的前m小元素个数for (int i = 1; i <= n; i++) cin >> h[i];  // 输入数组(堆的初始状态)s = n;  // 初始化堆大小为n// 构建初始堆:从最后一个非叶子节点开始,自底向上调整// 模拟:例如n=5时,i从2开始处理,然后i=1。每个节点下沉到合适位置// 这样可以更短的时间复杂度构建for (int i = n / 2; i; i--) down(i);// 输出前m小元素:每次取堆顶(最小值),然后维护堆while (m--) {cout << h[1] << ' ';  // 输出当前堆顶(最小元素)// 删除堆顶操作:用最后一个元素覆盖堆顶,堆大小减1h[1] = h[s]; s--;// 调整新堆顶元素,使其下沉到合适位置// 模拟:例如将原本最后的元素放到堆顶后,可能破坏堆结构,需要逐层比较下沉down(1); }return 0;
}/*
模拟示例(n=5, m=3,初始数组[3,1,2,4,5]):
1. 初始建堆:- i=2(元素1):无子节点,无需调整- i=1(元素3):- 比较左子节点1(更小),交换3和1 → 数组[1,3,2,4,5]- 递归调整位置2(原3):- 比较子节点4和5,无需调整
2. 第一轮输出:- 输出1 → 堆顶替换为5,s=4 → 数组[5,3,2,4]- 调整堆顶5:- 左子3 > 右子2,交换5和2 → [2,3,5,4]- 递归调整位置3(5),无子节点,停止
3. 第二轮输出:- 输出2 → 堆顶替换为4,s=3 → 数组[4,3,5]- 调整堆顶4:- 左子3更小,交换4和3 → [3,4,5]
4. 第三轮输出:- 输出3 → 堆顶替换为5,s=2 → 数组[5,4]- 调整堆顶5:- 左子4更小,交换 → [4,5]
最终输出序列:1 2 3
*/

本篇参考了acwing算法基础课。

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

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

相关文章

极狐GitLab 如何将项目共享给群组?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 共享项目和群组 (BASIC ALL) 在极狐GitLab 16.10 中&#xff0c;更改为在成员页面的成员选项卡上显示被邀请群组成员&#xf…

用 CodyBuddy 帮我写自动化运维脚本

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”。 #CodeBuddy首席试玩官 背景 我个人是非常喜欢 Jenkins 自动化部署工具的&#xff0c;之前都是手写 Jenki…

基于windows安装MySQL8.0.40

基于windows安装MySQL8.0.40 基于windows 安装 MySQL8.0.40&#xff0c;解压文件到D:\mysql-8.0.40-winx64 在D:\mysql-8.0.40-winx64目录下创建my.ini文件&#xff0c;并更新一下内容 [client] #客户端设置&#xff0c;即客户端默认的连接参数 # 设置mysql客户端连接服务…

Python小酷库系列:5个常用的dict属性化访问扩展库

5个常用的dict属性化访问扩展库 嵌套结构高级功能性能综合建议 在前面我们详细讲解了 Box和 Munch这两个dict属性化访问的扩展库&#xff0c;总体而言它们主要用于提升配置文件数据、JSON对象数据的可读性&#xff0c;减少了代码中双引号。在这一领域中还有dotmap、addict 和…

OC语言学习——面向对象(下)

一、OC的包装类 OC提供了NSValue、NSNumber来封装C语言基本类型&#xff08;short、int、float等&#xff09;。 在 Objective-C 中&#xff0c;**包装类&#xff08;Wrapper Classes&#xff09;**是用来把基本数据类型&#xff08;如 int、float、char 等&#xff09;“包装…

密码学系列 - SR25519与ED25519

SR25519 SR25519 是一种高级的数字签名算法&#xff0c;它基于 Schnorr 签名方案&#xff0c;使用的是 Curve25519 椭圆曲线。这种签名算法在密码学社区中广受欢迎&#xff0c;特别是在区块链和加密货币领域。以下是关于 SR25519 的详细介绍。 SR25519 简介 SR25519 是一种 …

Vue3源码学习7-PatchFlags使用位算符

文章目录 前言✅ 一、基础知识&#xff1a;什么是二进制&#xff1f;✅ 二、位运算的基本操作✅ 三、左移运算 <<✅ 四、实际用途&#xff1a;如何用于状态标记&#xff08;PatchFlags&#xff09;✅ 五、组合多个状态标记✅ 六、小结口诀&#xff08;记忆&#xff09;✅…

在 Vue 2 中使用 qrcode 库生成二维码

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

电子电器架构 --- 网关释放buffer的必要性

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

Java中Stream、File、方法递归

文章目录 十五、Stream流、File、方法递归1、Stream1.1 什么是Stream1.2 获取Stream流1.3 Stream流常见的中间方法1.3 Stream流常见的终结方法1.4 收集Stream流 2、File、IO流&#xff08;一&#xff09;2.1 存储数据的方案2.2 File&#xff1a;代表文本2.3 常用方法一&#xf…

挑战用豆包教我学Java01天

今天是豆包教我学Java的第一天&#xff0c;废话不多说直接开始。 1.每日题目&#xff1a; 基础语法与数据类型 题目&#xff1a;编写一个 Java 程序&#xff0c;从控制台读取两个整数&#xff0c;然后计算它们的和、差、积、商&#xff0c;并输出结果。题目&#xff1a;编写…

文章记单词 | 第67篇(六级)

一&#xff0c;单词释义 cylinder&#xff1a;英 [ˈsɪlɪndə(r)] 美 [ˈsɪlɪndər] &#xff0c;名词&#xff0c;意为 “圆筒&#xff1b;圆柱体&#xff1b;汽缸&#xff1b;&#xff08;有特定用途的&#xff09;圆筒形物品”。fool&#xff1a;英 [fuːl] 美 [fuːl]…

Make:独立创造者手册——从0到1的商业自由之路

目录 如何获得创业想法 • 解决你自己的问题 • 从微观细分市场起步 • 从问题出发&#xff0c;而非解决方案 • 记录与验证想法 如何构建产品 • 快速构建最小化产品 • 对抗完美主义 • 自行开发 vs. 外包 • 学习基础编程的必要性 案例与洞见 • Levelsio的70个项目与5%成…

spark基本介绍

一、Spark概述 Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 Hadoop是一个分布式系统结构的基础架构。 二、Spark与Hadoop相比较的优势&#xff1a; 1. 处理速度&#xff1a;Hadoop&#xff1a;数据处理速度相对较慢 Spark&#xff1a;速度比Hadoop快很…

Pdf转Word案例(java)

Pdf转Word案例&#xff08;java&#xff09; 需要导入aspose-pdf.jar 需要先手动下载jar包到本地&#xff0c;然后通过systemPath在pom文件中引入。 下载地址&#xff1a;https://releases.aspose.com/java/repo/com/aspose/aspose-pdf/25.4/ <dependency><groupId&…

探索 C++ 语言标准演进:从 C++23 到 C++26 的飞跃

引言 C 作为一门历史悠久且广泛应用的编程语言&#xff0c;其每一次标准的演进都备受开发者关注。从早期的 C98 到如今的 C23&#xff0c;再到令人期待的 C26&#xff0c;每一个版本都为开发者带来了新的特性和改进&#xff0c;推动着软件开发的不断进步。本文将深入探讨 C23 …

如何有效防御服务器DDoS攻击

分布式拒绝服务&#xff08;DDoS&#xff09;攻击通过大量恶意流量淹没服务器资源&#xff0c;导致服务瘫痪。本文将提供一套结合代码实现的主动防御方案&#xff0c;涵盖流量监控、自动化拦截和基础设施优化。 1. 实时流量监控与告警 目标&#xff1a;检测异常流量并触发告警…

【Bootstrap V4系列】学习入门教程之 组件-折叠(Collapse)

Bootstrap V4系列 学习入门教程之 组件-折叠&#xff08;Collapse&#xff09; 折叠&#xff08;Collapse&#xff09;How it works一、Example二、Horizontal 水平的三、Multiple targets 多个目标四、Accordion example 手风琴示例 折叠&#xff08;Collapse&#xff09; 通…

C24-数组

数组的引入:方便对同一类型的数据进行管理(一个班级里的45个同学、一个篮子里的12个苹果)数组的定义: 数据类型 数组名[常量表达式(也就是元素的个数)];int a[10]; //这里定义了一个能存放10个元素的整形数组数组初始化 完全初始化 int arr[3]{5,6,8};部分初始化 int arr[10]{…

手持小风扇方案解说---【其利天下技术】

春去夏来&#xff0c;酷暑时节&#xff0c;小风扇成为外出必备的解暑工具&#xff0c;近年来&#xff0c;随着无刷电机的成本急剧下降&#xff0c;小风扇也逐步从有刷变无刷化了。 数量最大的如一箱无刷马达&#xff0c;其次三相低压无刷电机也大量被一些中高端风扇大量采用。…