【调整堆】(C++ 代码实现 注释详解)

news2024/11/28 8:48:57

 自定义结构体:

#define sz 105
typedef struct node{
	int length;
	int l[sz];
}SqList;

 调整堆的函数:

HeapAdjust函数思路说明:

//目标:将以s为根的子树调整为大根堆

//具体操作:将路径上比s大的都往上移动,s往下移动,直到遇到比s还小的,就“放下”s

void HeapAdjust(SqList &L, int s, int m)//将以s为根的子树调整为大根堆<=>将路径上比s大的都往上移动,s往下移动,直到遇到比s还小的,就放下s
{
	int rc = L.l[s];
	for(int j = 2*s; j <= m; j *= 2)//j指向s的左子树
	{
		if(j<m && L.l[j] < L.l[j+1] ) j+=1;//j指向s的子树中较大的那个
		if(rc >= L.l[j]) break;//此时接着执行L.l[s] = rc; 便可实现上述目标
		L.l[s] = L.l[j]; s = j;//将路径上比s大的都往上移动,s往下移动
	}
	L.l[s] = rc;
}

void CreateHeap(SqList &L)
{
	int n = L.length;
	for(int i=n/2; i>0; i--)//从n/2向下取整得到的整数所对应的结果开始,依次进行调整堆的操作
	{						//关于为什么从n/2开始: 因为在n/2后面的节点都是叶子结点,不需要调整
		HeapAdjust(L, i, n);
	}
}

 完整代码:

#include<bits/stdc++.h>
using namespace std;
#define sz 105
typedef struct node{
	int length;
	int l[sz];
}SqList;

void HeapAdjust(SqList &L, int s, int m)//将以s为根的子树调整为大根堆<=>将路径上比s大的都往上移动,s往下移动,直到遇到比s还小的,就放下s
{
	int rc = L.l[s];
	for(int j = 2*s; j <= m; j *= 2)//j指向s的左子树
	{
		if(j<m && L.l[j] < L.l[j+1] ) j+=1;//j指向s的子树中较大的那个
		if(rc >= L.l[j]) break;//此时接着执行L.l[s] = rc; 便可实现上述目标
		L.l[s] = L.l[j]; s = j;//将路径上比s大的都往上移动,s往下移动
	}
	L.l[s] = rc;
}

void CreateHeap(SqList &L)
{
	int n = L.length;
	for(int i=n/2; i>0; i--)//从n/2向下取整得到的整数所对应的结果开始,依次进行调整堆的操作
	{						//关于为什么从n/2开始: 因为在n/2后面的节点都是叶子结点,不需要调整
		HeapAdjust(L, i, n);
	}
}

int main()
{
	SqList L;
	L.length = 0;
	srand(time(NULL));//随机数种子
	for(int i=1; i<=100; i++)
	{
		int rand_int = rand()%100;//生成0 ~ 99的随机整数
		L.l[i] = rand_int;
		cout<<rand_int<<" "; 
		L.length++;
	}
	CreateHeap(L);
	cout<<"\n"<<"after Adjustment: "<<endl;
	for(int i=1; i<=L.length; i++ )
	{
		cout<<L.l[i]<<" ";
	}
	return 0;
}

运行结果示例:

~希望对你有帮助~

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

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

相关文章

屏幕空间反射技术在AI绘画中的作用

在数字艺术和游戏开发的世界中&#xff0c;真实感渲染一直是追求的圣杯。屏幕空间反射&#xff08;Screen Space Reflection&#xff0c;SSR&#xff09;技术作为一种先进的图形处理手段&#xff0c;它通过在屏幕空间内模拟光线的反射来增强场景的真实感和视觉冲击力。随着人工…

selenium-java自动化教程

文章目录 Selenium支持语言WebDriver 开始使用chromedriver模拟用户浏览访问模拟点击事件关闭弹窗&#xff0c;选中元素并点击 获取页面文本结语 Selenium Selenium是一个自动化测试工具&#xff0c;可以模拟用户操作web端浏览器的行为&#xff0c;包括点击、输入、选择等。也可…

第十一届蓝桥杯C++青少年组中/高级组省赛2020年真题解析

一、单选题 第1题 表达式 ‘6’ - ‘1’ 的值是( ) A:整数 5 B:字符 5 C:表达式不合法 D:字符 6 答案&#xff1a;A 在 C 中&#xff0c;字符字面量用单引号括起来&#xff0c;例如 ‘6’ 和 ‘1’。这些字符字面量实际上是表示字符的 ASCII 值。在 ASCII 编码中&#xff0…

【机器学习】消息传递神经网络(MPNN)在分子预测领域的医学应用

1. 引言 1.1. 分子性质预测概述 分子性质预测是计算机辅助药物发现流程中至关重要的任务之一&#xff0c;它在许多下游应用如药物筛选和药物设计中发挥着核心作用&#xff1a; 1.1.1. 目的与重要性&#xff1a; 分子性质预测旨在通过分子内部信息&#xff08;如原子坐标、原…

2.数人数

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/431 题目描述 在一个班级里,男生比女生多…

MySQL—多表查询—子查询(介绍)

一、引言 上一篇博客学习完联合查询。 这篇开始&#xff0c;就来到多表查询的最后一种形式语法块——子查询。 &#xff08;1&#xff09;概念 SQL 语句中嵌套 SELECT 语句&#xff0c;那么内部的 select 称为嵌套查询&#xff0c;又称子查询。 表现形式 注意&#xff1a; …

达梦8 开启物理逻辑日志对系统的影响

物理逻辑日志&#xff0c;是按照特定的格式存储的服务器的逻辑操作&#xff0c;专门用于 DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时&#xff0c;这部分日志内 容会被存储在重做日志文件中。 要开启物理逻辑日志的功能&#xff0c;需要…

11.Spring AOP

文章目录 1.什么是 Spring AOP&#xff1f;2.为什要用 AOP&#xff1f;3.Spring AOP 应该怎么学习呢&#xff1f;3.1 AOP 组成3.1.1 切⾯&#xff08;Aspect&#xff09; 切点 通知3.1.2 连接点&#xff08;Join Point&#xff09;3.1.3 切点&#xff08;Pointcut&#xff09;…

《Brave New Words 》1.1 抛弃瓶子

Part I: Rise of the AI Tutor 第一部分&#xff1a;AI 导师的崛起 A great teacher can teach calculus with a paper clip and literature in an empty field. Technology is just another tool, not a destination. —Unknown 一位伟大的教师可以用回形针教微积分&#xff0…

Coze入门指南:创建Bot时,如何写好人设与回复逻辑(Persona Prompt)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Coze Bot 📒📝 Persona & Prompt🌟 # Character🌟 ## Skills🌟 # Overall Rules to follow🌟 ## Workflow🌟 ## Constraints📝 通用写法与模板📝 示例🌟技巧和注意事项⚓️ 相关链接 ⚓️📖 介绍 📖…

11.闰年的判定

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/615 题目描述 给定一个正整数 𝑦y 表示…

二进制中1的个数-java

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、二进制中1的个数 二、算法思路 1.将一个整数转化成二进制形式 2.查询一个数的二进制数中的第k位是多少 3.lowbit(x)操作 三、代码如下 1.代码如下&…

Jmeter 压力测测试的简单入门

下载安装 官方网站&#xff1a;Apache JMeter - Download Apache JMeter 下载完成解压即可。 配置 1. 找到 bin 目录下的 ApacheJMeter.jar 包&#xff0c;直接打开 如果向图片这样不能直接打开&#xff0c;就在此路径运行 CMD&#xff0c;然后输入下面的命令即可启动。 ja…

React实现在线预览word报告/本地选择报告预览

标题使用的核心技术点是docx-preview&#xff0c;读取到文件的File对象&#xff0c;用File去做文件展示&#xff0c;这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中&#xff08;上zip已包…

彼长技以助己(4)边界思维

彼长技以助己&#xff08;4&#xff09;边界思维 边界思维 接下来是工程思维中的第二个思维&#xff1a;边界思维。它是适用于所有工程领域&#xff0c;事半功倍的方法&#xff0c;很值得大家去学习掌握。 我们做任何事情都是有边界的&#xff0c;技术有边界、人工智能有边界…

ctfshow-web入门-命令执行(web42知识铺垫与四种常见截断方法)

目录 1、知识铺垫 &#xff08;1&#xff09;文件描述符 &#xff08;2&#xff09;/dev/null 2、代码审计 3、命令分隔 &#xff08;1&#xff09;使用分号 ; &#xff08;2&#xff09;使用逻辑或 || &#xff08;3&#xff09;使用 && 或者 & 4、%0a …

【中国开源生态再添一员】天工AI开源自家的Skywork

刚刚看到《AI高考作文出圈&#xff0c;网友票选天工AI居首》&#xff0c;没想到在Huggingface中发现了Skywork大模型。天工大模型由昆仑万维自研&#xff0c;是国内首个对标ChatGPT的双千亿级大语言模型&#xff0c;天工大模型通过自然语言与用户进行问答式交互&#xff0c;AI生…

【Linux】进程5——进程优先级

1.进程优先级 1.1.什么是进程优先级 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用&#xff0c;可以改善系统性能。还可以把进程运行到指定的CPU上&#x…

SpringBoot与MyBatis的快速整合(基于注解)

文章目录 创建Spring Boot项目配置数据库连接信息编写MyBatis Mapper接口使用XML文件编写SQL映射配置数据源切换引入Druid依赖配置Druid数据源 配置MyBatis支持事务管理 在使用Spring Boot创建新项目或新模块时&#xff0c;如果需要使用MyBatis来进行数据库操作&#xff0c;可以…

基于springboot的教学管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;教师管理&#xff0c;学生管理&#xff0c;课程管理 教师账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;课程管理&#xff0c;课程表…