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

堆排序(算法题)

在这里插入图片描述

#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算法基础课。

相关文章:

  • 快速上手知识图谱开源库pykeen教程指南(一)
  • 【RabbitMQ可靠性原理】
  • JMeter快速指南:命令行生成HTML测试报告(附样例命令解析)
  • 传输层协议 1.TCP 2.UDP
  • D盘出现不知名文件
  • ubuntu安装Go SDK
  • 【Pandas】pandas DataFrame rolling
  • 每日一练(5~7):移动零·(双指针算法)
  • uniapp自定义底部导航栏h5有效果小程序无效的解决方案
  • 学习基本开锁知识
  • 探索智能体开发新边界:Cangjie Magic开源平台体验与解析
  • 排列组合算法:解锁数据世界的魔法钥匙
  • MATLAB导出和导入Excel文件表格数据并处理
  • nRF Connect SDK system off模式介绍
  • 【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析
  • React学习路线-Deepseek版
  • 如何应对客户在验收后提出新需求?
  • 【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)
  • 多模态大语言模型arxiv论文略读(六十三)
  • 源码分析之Leaflet中的LayerGroup
  • 上海发布首份直播电商行业自律公约,禁止虚假宣传、商业诋毁
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 公募基金解读“一揽子金融政策”:增量财政空间或打开,有助于维持A股活力
  • 新消费观察| 零售品牌 “走出去” ,如何开辟“新蓝海”?
  • 4月深圳新房、二手房成交同比均上涨,“5月有望延续积极向好的发展态势”
  • 马上评|持续对标国际一流,才有22项“全球最优”