【算法小结】堆及堆排序

掌握堆排序:从原理到实现详解

“ Ctrl AC!一起 AC!”

目录

堆排序


堆是一颗完全二叉树,其中树的每个结点都不小于其左右孩子的称为最大堆,反之称为最小堆

【以下以最大堆为例】

定义数组表示堆:

const int maxn=100;
//heap为堆,n为元素个数
int heap[maxn],n=10;

向下调整:

//low为欲调整的下标,high为最后一个元素的下标
void downAdjust(int low,int high){
	int i=low,j=i*2;
	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; //i继续跟着原来的low点,j继续充当左孩子
			j=i*2;
		}
		else{
			break;
		}
	}
}

建堆:

从n/2枚举到1,保证枚举的不是叶结点,并且最大的数能到达最顶端。

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

删除堆顶元素:

将数组的最后一个数代替掉堆顶的元素,然后总个数减一,并向下调整堆顶元素至合适位置。

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

向上调整:

//其中low一般为1,表示第一个元素,high表示欲调整的元素
void upAdjust(int low,int high){
	int i=high,j=i/2;
	while(j>=low){
		if(heap[j]<heap[i]){
			swap(heap[j],heap[i]);
			i=j;
			j=i/2;
		}
		else{
			break;
		}
	}
}

插入元素:

在数组末尾加新元素,然后通过向上调整,将其调至合适位置。

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

堆排序

取堆顶元素并删除调整,按顺序放入容器就变成有序的了。

具体讲就是,取出堆顶元素,用堆的最后一个元素替换掉它,然后对堆顶向下调整至合适位置,保持堆的性质。

void heapSort(){
	createHeap();
	for(int i=n;i>1;i--){
		printf("%d\n",heap[1]);
		swap(heap[i],heap[1]);
		downAdjust(1,i-1);
	}
	printf("%d\n",heap[1]);//输出最后一个
}

感谢阅读!!!

“ Ctrl AC!一起 AC!”

裂缝目标检测数据集 一、基础信息 数据集名称:裂缝目标检测数据集 图片数量: 训练集:462张图片 验证集:21张图片 测试集:9张图片 总计:492张图片 分类类别: crack(裂缝):指物体表面的裂缝,常见于建筑、基础设施等场景,用于损伤检测和风险评估。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式兼容常见深度学习框架。 二、适用场景 建筑与基础设施检查: 数据集支持目标检测任务,帮助构建能够自动识别裂缝区域的AI模型,用于建筑物、道路、桥梁等结构的定期健康监测和维护。 工业检测与自动化: 集成至智能检测系统,实时识别裂缝缺陷,提升生产安全和效率,适用于制造业、能源等领域。 风险评估与保险应用: 支持保险和工程行业,对裂缝进行自动评估,辅助损伤分析和风险决策。 学术研究与技术开发: 适用于计算机视觉与工程领域的交叉研究,推动目标检测算法在现实场景中的创新应用。 三、数据集优势 精准标注与任务适配: 标注基于YOLO格式,确保边界框定位准确,可直接用于主流深度学习框架(如YOLO、PyTorch等),简化模型训练流程。 数据针对性强: 专注于裂缝检测类别,数据来源于多样场景,覆盖常见裂缝类型,提升模型在实际应用中的鲁棒性。 实用价值突出: 支持快速部署于建筑监测、工业自动化等场景,帮助用户高效实现裂缝识别与预警,降低维护成本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl AC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值