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

【数据结构】_堆的向上调整和向下调整建堆法

目录

1. 向上调整建堆法 

1.1 思路及时间复杂度

1.2 实现及测试

2. 向下调整建堆法

2.1 思路及时间复杂度

2.2 实现及测试


1. 向上调整建堆法 

1.1 思路及时间复杂度

1、调整思路:

建堆时,每创建一个新结点就将其插入到最末的叶结点位置,然后调用向上调整方法使其满足大根堆或小根堆特性;

2、时间复杂度:

1.2 实现及测试

for (int i = 1; i < n; i++) {
		AdjustUp(a, i);
	}

对使用向上调整建堆法进行测试:

#define _CRT_SECURE_NO_WARNINGS
#include"Heap.h"
// 向上调整建堆法
void TestCreateHeapUp() {
	int a[] = { 4,2,8,1,5,6,9,7 };
	int n = sizeof(a) / sizeof(a[0]);
	for (int i = 1; i < n; i++) {
		AdjustUp(a, i);
	}
	printf("CreateHeapUp: maxHeap array: \n");
	for (size_t i = 0; i < n; i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
}

int main() {
	TestCreateHeapUp();
	return 0;
}

运行结果如下: 

2. 向下调整建堆法

2.1 思路及时间复杂度

1、调整思路:

倒数的第一个非叶子结点(最末子结点的父结点)开始调用向下调整方法。使以该结点为根结点的子树满足小根堆或大根堆特性。

2、时间复杂度

2.2 实现及测试

 for循环条件:最末叶结点下标为n-1,其父结点的下标为(n-1-1)/2,即(n-2)/2,直至调整到下标为0的堆顶结点位置:

	for (int i = (n - 2) / 2; i >= 0; i--) {
		AdjustDown(a, n, i);
	}

对其进行测试:

#define _CRT_SECURE_NO_WARNINGS
#include"Heap.h"
// 向下调整建堆法
void TestCreateHeapDown() {
	int a[] = { 4,2,8,1,5,6,9,7 };
	int n = sizeof(a) / sizeof(a[0]);
	for (int i = (n - 2) / 2; i >= 0; i--) {
		AdjustDown(a, n, i);
	}
	printf("CreateHeapDown: maxHeap array: \n");
	for (size_t i = 0; i < n; i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
}
int main() {
	TestCreateHeapDown();
	return 0;
}

运行结果如下:


http://www.kler.cn/a/542837.html

相关文章:

  • 接口测试Day12-持续集成、git简介和安装、Gitee远程仓库、jenkins集成
  • 蓝桥杯算法日记|贪心、双指针
  • STM32系统架构介绍
  • 【deepseek-r1本地部署】
  • C++:gtest的使用
  • Lombok使用指南
  • Lucene 中的并发错误:如何修复乐观并发失败
  • 工业4.0时代,3D开发工具HOOPS如何赋能塑计量行业自动化与数据可视化?
  • Visual Studio Code中文出现黄色框子的解决办法
  • C语言中常见关键字(static,extern)
  • 【含文档+PPT+源码】基于python爬虫的豆瓣电影、音乐、图书数据分析系统
  • 妙用Pytest内置request Fixture 监控测试执行过程
  • Spring boot中实现字典管理
  • Vue解决父子组件传值,子组件改变值后父组件的值也改变的问题
  • deepseek:三个月备考高级系统架构师
  • 【并发控制、更新、版本控制】.NET开源ORM框架 SqlSugar 系列
  • ASP.NET Core DDD
  • C++多态性之重载多态(二)—学习记录
  • 图像处理篇---基本Python图像处理
  • Linux查看硬件常用命令
  • 美​团​一​二​面​​东​方​财​富​一​面
  • 设计模式(一):设计原则、常用设计模式
  • 键盘启用触摸板-tips
  • YOLO11改进-模块-引入基于局部重要性的注意力机制Local Importance-based Attention LIA
  • redis底层数据结构——简单动态字符串
  • redis中的hash结构