温故知新,基础复习(二叉堆排序)

简介: 温故知新,基础复习(二叉堆排序)最小堆(最终数组的数据是降序),最大堆(最终数组的数据是升序)下例是最小堆#include #include void Swap(int Arra[],unsigned int LeftIndex,u...

温故知新,基础复习(二叉堆排序)

最小堆(最终数组的数据是降序),最大堆(最终数组的数据是升序)


下例是最小堆


#include <stdio.h>
#include <stdlib.h>

void Swap(int Arra[],unsigned int LeftIndex,unsigned int RightIndex)
{
	int TeampValue = Arra[LeftIndex];
	Arra[LeftIndex]=Arra[RightIndex];
	Arra[RightIndex]=TeampValue;
}

void MinHeapFixDown(int Arra[],unsigned int StartIndex,unsigned int ArraSize)
{
	int TeampValue = Arra[StartIndex];
	unsigned int MinValueIndexOfChild = 2*StartIndex+1;

	while(MinValueIndexOfChild<ArraSize)
	{
		//printf("%u,%d,%d,%d\n",StartIndex,TeampValue,MinValueIndexOfChild,ArraSize);
		if (MinValueIndexOfChild+1<ArraSize&&Arra[MinValueIndexOfChild]>Arra[MinValueIndexOfChild+1])
		{
			MinValueIndexOfChild=MinValueIndexOfChild+1;
		}

		if (Arra[MinValueIndexOfChild]>=TeampValue)
		{
			break;
		}

		Arra[StartIndex]=Arra[MinValueIndexOfChild];
		StartIndex=MinValueIndexOfChild;
		MinValueIndexOfChild=2*StartIndex+1;
	}

	Arra[StartIndex]=TeampValue;
}

void BuildMinHeap(int Arra[],unsigned int ArraSize)
{
	if (ArraSize<2)
	{
		return;
	}
	//printf("build start\n");
	for (unsigned int i = (ArraSize-1)/2+1; i >0; --i)
	{
		MinHeapFixDown(Arra,i-1,ArraSize);
	}
	//printf("build end\n");
}

void HeapSort(int Arra[],unsigned int ArraSize)
{
	BuildMinHeap(Arra,ArraSize);
	printf("ArraSize=%d\n",ArraSize);
	for (unsigned int i = ArraSize-1; i >=1; --i)
	{
		Swap(Arra,0,i);
		MinHeapFixDown(Arra,0,i);
	}
}

int main()
{
	//int Arra[]={-6,-8,9,-3,-1,0,13,-15,28,-40};
	int Arra[]={-6,10,-7,15,-9,12,50,-35,9};
	HeapSort(Arra,sizeof(Arra)/sizeof(Arra[0]));

	for (int i = 0; i < sizeof(Arra)/sizeof(Arra[0]); ++i)
	{
		printf("%d,",Arra[i] );
	}

	printf("\n");
}




目录
打赏
0
0
0
0
13
分享
相关文章
长江商学院 x 阿里巴巴集团数智创新学院 | 第三模块「金融数智创新和组织升级」
编者按: 风好正是扬帆时,奋楫逐浪天地宽。春回大地,万物复苏之际,正是砥砺奋进昂首迈步之时。2022 年2月24日,数智创新学院再聚杭州,与长江商学院 x 阿里巴巴一道开启第三模块充电学习,引领创新变革,书写奋进新篇章。
880 0
BlockChain:【中本聪】历史之作《Bitcoin: A Peer-to-Peer Electronic Cash System》 《比特币:一种点对点的电子现金系统》—九页中英文对照翻译
1、了解区块链底层原理技术,还是要看原汁原味的白皮书,对的,就是《Bitcoin: A Peer-to-Peer Electronic Cash System》 2、有些术语翻译或许不太准确,欢迎前来提错误!! 2017-12-30最近一次修改
BlockChain:【中本聪】历史之作《Bitcoin: A Peer-to-Peer Electronic Cash System》 《比特币:一种点对点的电子现金系统》—九页中英文对照翻译
【大数据新手上路】“零基础”系列课程--MySQL 数据整库迁移到 MaxCompute
本实验通过大数据开发套件的整库迁移功能,快速将 MySQL 数据整库迁移到 MaxCompute,从而提升工作效率、降低用户使用成本。
4947 0
PHPStorm IDE 快捷键(MAC)
⌘——Command ⌃ ——Control ⌥——alt ⇧——Shift ⇪——Caps Lock fn——功能键就是fn 编辑 Command+alt+T 用 (if..else, try.
782 0
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
本文详细介绍了Maven的项目管理工具特性、安装步骤和配置方法。主要内容包括: Maven概述:解释Maven作为基于POM的构建工具,具备依赖管理、构建生命周期和仓库管理等功能。 安装步骤: 从官网下载最新版本 解压到指定目录 创建本地仓库文件夹 关键配置: 修改settings.xml文件 配置阿里云和清华大学镜像仓库以加速依赖下载 设置本地仓库路径 附加说明:包含详细的配置示例和截图指导,适用于各种操作系统环境。 本文提供了完整的Maven安装和配置
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
Go语言实战指南 —— Go中的反射机制:reflect 包使用
Go语言中的反射机制通过`reflect`包实现,允许程序在运行时动态检查变量类型、获取或设置值、调用方法等。它适用于初中级开发者深入理解Go的动态能力,帮助构建通用工具、中间件和ORM系统等。
132 62
电脑没有有效IP配置,连不上网怎么办?,解决办法
当电脑出现“本地连接没有有效的IP配置”错误时,通常表示无法正常获取或配置IP地址,导致无法上网。本文介绍了常见原因及解决方法,包括重启路由器和电脑、手动设置IP地址、更新或重新安装网卡驱动、检查DHCP服务是否开启等步骤,帮助你快速恢复网络连接。
145 59
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问