堆的基本操作

堆的创建和基本操作 1、堆的概念 如果有一个关键码的集合 K={K0,K1,K2,…,Kn-1},把所有完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i +1 且 Ki <= K2i + 2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为 小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 堆的性... 阅读详情
const int maxn=100;
int heap[maxn];  //堆 
int n=10;  //元素个数 

1、向下调整 

对heap数组在【low,high】范围进行向下调整 

其中low为欲调整结点的数组下标,high一般为堆的最后一个元素的数组下标

//对heap数组在【low,high】范围进行向下调整 
//其中low为欲调整结点的数组下标,high一般为堆的最后一个元素的数组下标 
void downAdjust(int low,int high)
{
	int i=low;
	int j=i*2;   //i为欲调整结点,j为其左孩子 
	while(j<=high)
	{
		//如果右孩子存在,且右孩子的值大于左孩子 
		if(j+1<=high&&heap[j+1]>heap[j])
		{
			j=j+1;
		}
		if(heap[j]>heap[i])
		{
			swap(heap[j],heap[i]);
			i=j;
			j=i*2;
		}
		else
		{
			break;
		}
	}	
}

2、建堆

void createHeap()
{
	for(int i=n/2;i>=1;i--)
	{
		downAdjust(i,n);
	}
} 

 3、删除堆顶元素

void deleteTop() 
{
	//heap[1]=heap[n--];
	heap[1]=heap[n];
	n--;
	downAdjust(1,n);	
}

4、向上调整 

void upAdjust(int low,int high) 
{
	int i=high; //i为欲调整结点 
	int j=i/2;  //j为其父节点 
	while(j>=low) 
	{
		if(heap[j]<heap[i])
		{
			swap(heap[j],heap[i]);
			i=j;   //保持i为欲调整结点,j为i的父节点 
			j=i/2;
		}
		else
		{
			break;
		} 
	}
}

5、插入元素 

void insert(int x)
{
	heap[++n]=x;
	upAdjust(1,n);	 
}

6、堆排序

void heapSort() 
{
	createHeap();
	for(int i=n;i>1;i--)
	{
		swap(heap[i],heap[1]);
		downAdjust(1,i-1);
	}
}

 

堆的基本操作及堆排序 Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 堆 堆的定义 任意一个子节点总是大于等于或者小于等于父节点的完全二叉树称之为堆,根据字节点和父节点的大小关系,堆又分为大顶堆和小顶堆 大顶堆: 父节点的值总是大于等于子节点的值的堆称之为大顶堆,大顶堆的最大值总是在堆顶 小顶堆: 父节点的值总是小于等于子节点的值的堆称之为小顶 阅读详情

相关推荐

基于单片机智能家居控制系统设计

*单片机设计介绍,基于单片机智能家居控制系统设计。

QQ2193276455的博客 1717

堆的操作

编写代码,实现最小堆(Min-Heap)的操作。 输入格式: 第一行是两个不大于1000的正整数N和K,用空格间隔。其中N是堆的容量,需创建一个容量为N的堆。 接下来K行,是对这个堆的依次的K项插入或删除操作:用1 x表示插入元素x;用-1表示删除堆顶。 接下来一行是一个不大于1000的正整数M, 接下来一行是M个整数(在整型范围内),用空格间隔, 要求将这M个整数组成的列表调...

LightInDarkness的博客 2715

初识机会网络仿真器ONE中ExternalMovement移动模型(导入外部移动数据)

最近半个月一直在研究ONE中关于ExternalMovement移动模型的源代码,在网上几乎没有找到相关的资料,很是苦恼,如果有共同研究方向的小伙伴欢迎联系我,共同讨论进步。 下面记录一下几点感悟: 1、使用外部数据的前提是在ONE的配置文件中增加及修改相关代码: Group.movementModel = ExternalMovement ExternalMovement.file = move...

qq_36974792的博客 659

堆的基本操作及应用

1. 堆的基本操作:(1)向下调整:O(log(n))完全二叉树的高度(2)建堆:O(n)2. 优先级队列(堆的应用):(1)查看堆顶元素:O(1)(2)添加元素(向上调整):O(log(n))(3) 删除堆顶元素(替换 + 向下调整):O(log(n))

AwwzJ_0821的博客 959

基于 MATLAB 的综合能源系统建模:全面解析与案例应用 

本文详细介绍了基于 MATLAB 的综合能源系统建模相关知识,包括 MATLAB 在综合能源建模中的优势、综合能源系统各组件和网络的建模方法,并通过园区综合能源系统的案例展示了从建模到优化调度求解以及结果分析的全过程。在当今全球能源格局深刻变革的背景下,综合能源系统(Integrated Energy System,IES)作为一种创新的能源供应体系,整合了多种能源形式,如电力、热力、燃气等,以实现能源的高效生产、传输、分配和利用。需要考虑燃气的压力、流量特性以及管道的阻力特性等。

qq_57128262的博客 1336

如何让C++程序生成dump文件?生成dump文件的方式有哪些?如何使用Windbg分析dump文件?

本文详细介绍了如何让C++程序生成dump文件、生成dump文件的多种方式以及如何使用Windbg分析dump文件,并给出了对应的实战分析案例,有一定的实战参考价值。

dvlinker的技术专栏 5万+

PTA 堆的操作

7-15 堆的操作 (20分) 编写代码,实现最小堆(Min-Heap)的操作。 输入格式: 第一行是两个不大于1000的正整数N和K,用空格间隔。其中N是堆的容量,需创建一个容量为N的堆。 接下来K行,是对这个堆的依次的K项插入或删除操作:用 1 x 表示插入元素x;用 -1 表示删除堆顶。 接下来一行是一个不大于1000的正整数M, 接下来一行是M个整数(在整型范围内),用空格间隔, 要求将这...

qq_43778565的博客 3575

对偶分解算法详解及其Python实现

对偶分解算法是一种广泛应用于求解凸优化问题的有效方法,尤其在大规模数据处理和分布式计算中展现出强大的实用性。在许多实际应用中,直接求解原始问题可能由于计算复杂度过高、资源受限或问题规模过大而变得不可行。这时,对偶分解方法为我们提供了一种高效的替代方案。对偶分解算法的核心思想是将复杂的原问题转化为其对应的拉格朗日对偶问题。通过引入拉格朗日乘子并构造对偶函数,该方法在一定程度上简化了问题的求解过程。特别是,对于包含多个约束条件的大规模优化问题,对偶分解可以将原问题分解为若干个小规模、相互独立的子问题。

闲人编程的博客 1754

堆的基本操作详解

堆的性质 1,堆中某节点的值总是不大于或不小于其父节点的值。 2,堆是一颗完全二叉树。 1,堆分为两种,大根堆和小根堆。 2,我们用数组来存储堆,所以我们想象出来的是一颗完全二叉树,实际上操纵的是数组。如图: 3,现在我们来实现堆的基本操作。 (1)首先,我们来创建一个结构体来表示堆。 typedef struct Heap { HPDataType* _a;//使用动态的数组,方便扩容。 int _size;//堆的有效数字的个数 int _capacity..

weixin_52122624的博客 1108

ARM与PC共享文件方式【samba】移植与配置

方式推荐指数适用平台优点缺点⭐⭐⭐⭐⭐全平台 (Win/Mac/Linux)兼容性最强,操作像本地文件配置稍繁琐,协议开销略大NFS⭐⭐⭐⭐Linux/Mac (Win支持一般)速度极快,CPU占用低Windows配置复杂,权限管理较难SFTP (SSH)⭐⭐⭐⭐全平台 (需客户端)安全加密,无需额外配置服务需使用FileZilla/Xftp等专用软件物理U盘⭐⭐⭐全平台无需网络,速度取决于接口需要人工插拔,不适合自动化Syncthing⭐⭐⭐⭐全平台自动同步,支持远程。

浩瀚之水的专栏 263

正点原子stm32f103RChal库制作数字秒表:如用keil5和正点原子STM32F1开发板实现?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1265

利用C语言模拟实现堆的基本操作和调堆算法

主要讲述了堆的基本原理和特性,使用C语言模拟实现堆的初始化、插入、删除等基本操作,通过回调函数和函数指针实现大根堆和小根堆的不同调堆算法,堆的应用场景和优势等内容

螺蛳粉只吃炸蛋的走风的博客 537

YOLOv11改进策略【Neck】| PRCV 2023,SBA(Selective Boundary Aggregation):特征融合模块,描绘物体轮廓重新校准物体位置,解决边界模糊问题

SBA 模块在医疗图像分割中具有重要作用,其设计出发点是解决图像中物体边界模糊以及融合特征时的冗余和不一致问题。

Limiiiing的博客 1943

堆的基本操作(c语言实现)

1.7.获取堆的数据个数。

2301_80224556的博客 1102

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数据结构串 堆串基本操作C语言实现

【数据结构】串 堆串的基本操作 以一组地址连续的存储单元存放串值字符序列,存储空间在程序执行过程中动态分配得到,操作灵活。 代码: 1.结构体定义 typedef struct { char * ch; //若是非空串,则按串长分配存储区,否则ch为NULL int length; //串长度 }HString; 2.基本操作函数声明 // 基本操作的函数原型说明 //初始化生成一个空...

欢乐佛的博客 8437

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

堆的基本操作的实现

什么是堆? 是一种特殊的“队列”,取出元素的顺序依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。 堆的特性: (1)结构特性:用数组表示的完全二叉树; (2)有序性:任一结点的关键字是其子树所有结点的最大值或最小值(对应最大堆、最小堆)。 故对堆进行操作时一定不能破坏这两特性。 堆的基本操作: #define MaxData 。。。//建议设一个堆的最大元素值作为哨兵,在对堆进行操作...

derbi123123的博客 609

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

堆基本操作

堆分为大堆和小堆,堆本质上是一个完全二叉树,这里将堆里的元素存在一个数组中,大堆是根结点都大于左右孩子,小堆是根结点都小于左右孩子。 堆的基本操作包括:(以大堆为例) 初始化堆,创建堆,向上调整,向下调整,堆排序。 代码如下: Heap.h中代码如下: #pragma once #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #inc...

sophia__yu的博客 236
上一篇: 好朋友【并查集】
下一篇: codeup 21142: 合并果子【哈夫曼树】
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值