AcWing 838. 堆排序
2024-10-08 10:41:00
#include <iostream>
#include <algorithm>
using namespace std;
const int N = ;
int n, m;
int h[N], size;
void down(int u) {
int t = u; //u这个点的做儿子是u*2,右儿子是u*2+1 完全二叉树
if (u * <= size && h[u * ] < h[t]) t = u * ; //如果左儿子存在,而左儿子比u小
if (u * + <= size && h[u * + ] < h[t]) t = u * + ;//右
if (u != t) {//判断是不是父亲,如果不是,那么交换
swap(h[u], h[t]);
down(t);//递归
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i ++ ) scanf("%d", &h[i]);
size = n;
for (int i = n / ; i; i -- ) down(i);//优化
while (m -- ) {
printf("%d ", h[]);//输出最小
h[] = h[size -- ];//末端的数字覆盖最小数字的位置
down();//再down
}
puts("");
return ;
}
最新文章
- C#温故知新:《C#图解教程》读书笔记系列
- Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片
- Java 日期格式化工具类
- 信息安全系统设计基础实验一:Linux开发环境的配置和使用
- Windows2003操作系统SQL Server 2008安装图解(详细)
- HBase使用场景和成功案例
- QStandardItemModel角色控制及QTreeView加入不同的右键菜单
- MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
- Android Studio 中快速提取方法
- 用python写爬虫
- 如何实现在Windows上运行Linux程序,附示例代码
- [0] C# 扩展方法(Extension Method)
- windows Apache服务器配置
- python 将os.getcwd()获取路径中的\替换成\\
- C# 字符串按 ASCII码 排序,注意其中的小坑
- Django学习手册 - 连接mysql数据库
- gitlab搭建与配置说明
- VS2013+Win10+opencv3.0配置(包括opencv2.4.10版本)
- style-loader、css-loader、mini-css-extract-plugin 区别
- 使用Java客户端对Redis进行操作
热门文章
- KafkaUtils.createDirectStream报错Cannot resolve symbol createDirectStream
- 4.Docker 操作容器
- 1.什么是 Docker
- centos7下top free vmstat 命令详情
- 腾讯云COS对象存储
- 基本程序单元Activity
- ReLU(inplace=True),这里的inplace=true的意思
- 题解【AcWing271】杨老师的照相排列
- 使用Python发送、订阅消息
- 【HTML】三种方法使HTML单页面输入密码才能访问