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

题解:AcWing 838 堆排序

【题目来源】

AcWing:838. 堆排序 - AcWing题库

【题目描述】

输入一个长度为\(n\)的整数数列,从小到大输出前\(m\)小的数。

【输入】

第一行包含整数\(n\)\(m\)。第二行包含\(n\)个整数,表示整数数列。

【输出】

共一行,包含\(m\)个整数,表示整数数列中前\(m\)小的数。

【输入样例】

5 3 
4 5 1 3 2

【输出样例】

1 2 3

【解题思路】

image

【算法标签】

《AcWing 838 堆排序》 #堆#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 100010;
int n, m;  // n: 堆的大小,m: 要输出的最小值的数量
int h[N], siz;  // h: 堆数组,siz: 当前堆的大小// 向下调整函数
void down(int u)
{int t = u;  // t记录最小值的下标// 比较当前节点与其左子节点if (u * 2 <= siz && h[u * 2] < h[t]){t = u * 2;}// 比较当前节点与其右子节点if (u * 2 + 1 <= siz && h[u * 2 + 1] < h[t]){t = u * 2 + 1;}// 如果最小值不是当前节点,交换并继续调整if (u != t){swap(h[u], h[t]);down(t);}
}int main()
{scanf("%d%d", &n, &m);  // 读入n和mfor (int i = 1; i <= n; i++){scanf("%d", &h[i]);  // 读入堆的元素}siz = n;  // 初始化堆的大小// 建堆:从最后一个非叶子节点开始向下调整for (int i = n / 2; i; i--){down(i);}// 输出前m个最小值while (m--){printf("%d ", h[1]);  // 输出堆顶(最小值)h[1] = h[siz];  // 用最后一个元素覆盖堆顶siz--;  // 堆大小减1down(1);  // 从堆顶开始向下调整}return 0;
}

【运行结果】

5 3 
4 5 1 3 2
1 2 3
http://www.jsqmd.com/news/399301/

相关文章:

  • 题解:AcWing 840 模拟散列表
  • 神来之笔!提示工程架构师的Agentic AI可视化分析创新之举
  • 探索Gemini在AI原生应用中的无限可能
  • 硕士研究生毕业要求的两个工作量是什么意思?
  • 《AI应用架构师剖析:AI发展进程中社会责任的关系密码》
  • Windows 的 cmd 里如何定义 alias?
  • 题解:AcWing 837 连通块中点的数量
  • 题解:AcWing 836 合并集合
  • 题解:AcWing 240 食物链
  • 2026 深度解析:ChatGPT Plus 国内充值与代充避坑指南(技术原理与实操全纪录)
  • 2026 技术指南:攻克 ChatGPT Plus 国内订阅难题(含代充、虚拟卡、支付风控深度解析)
  • 【UI自动化测试】2_PO模式 _单元测试框架(重点)
  • 多源异构大数据融合挖掘技术
  • 模型蒸馏在AI原生应用中的5大核心优势解析
  • 【UI自动化测试】1_PO模式 _面向过程编码
  • 开发日志4
  • 讲讲积分墙广告、精品页面、canvas 的 SEO 密码
  • Copilot进阶教程:在AI原生应用中实现智能开发工作流
  • 题解:AcWing 835 Trie字符串统计
  • 冥想第一千七百九十九天(1799)
  • 临沂有实力的橡胶木板材公司哪家好 - 品牌推荐(官方)
  • 冥想第一千八百天(1800)
  • 聊聊 Comsol 中的拓扑优化那些事儿
  • 2036年,AGI会如约而至吗?深度剖析通用人工智能的十年之约与未来图景
  • 题解:AcWing 143 最大异或对
  • 题解:AcWing 829 模拟队列
  • Seedance 深度解析:字节跳动 AI 视频生成模型从 1.0 到 2.0 的全面进化
  • 题解:AcWing 831 KMP字符串
  • CVE-2016-6802
  • 探秘DS18B20:单总线数字温度传感器的原理与应用