排序算法-堆积树排序法(HeapSort)
目录
排序算法-堆积树排序法(HeapSort)
1、说明
2、算法分析
3、C++代码
排序算法-堆积树排序法(HeapSort)
1、说明
堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序时间。堆积排序法用到了二叉树的技巧,是利用堆积树来完成排序的。堆积树是一种特殊的二叉树,可分为最大堆积树和最小堆积树两种。
最大堆积树满足以下3个条件:
- 它是一棵完全二叉树。
- 所有节点的值都大于或等于它左右子节点的值。
- 树根是堆积树中最大的。
最小堆积树具备以下3个条件:
- 它是一棵完全二叉树。
- 所有节点的值都小于或等于它左右子节点的值。
- 树根是堆积树中最小的。
2、算法分析
- 在所有情况下,时间复杂度均为
。
- 堆积排序法不是稳定排序法。
- 只需要一个额外的空间,空间复杂度为
。
3、C++代码
#include<iostream>
#include<iomanip>
using namespace std;void Print(int* data, int size) {for (int i = 1; i < size; i++)cout << "[" << setw(2) << data[i] << "] ";cout << endl;
}void Swap(int& i, int& j) {int temp = i;i = j;j = temp;
}void ad_heap(int* data, int i, int size) {int j = 2 * i;int temp = data[i];int post = 0;while (j <= size && post == 0){if (j < size) {if (data[j] < data[j + 1])j++;}if (temp >= data[j])post = 1;else {data[j / 2] = data[j];j *= 2;}}data[j / 2] = temp;
}void Heap(int* data, int size) {for (int i = (size / 2); i > 0; i--)ad_heap(data, i, size - 1);for (int i = size - 2; i > 0; i--) {Swap(data[1], data[i + 1]);ad_heap(data, 1, i);}
}int main() {int data[9] = { 0,5,6,4,8,3,2,7,1 };int size = 9;cout << "原始数据:";Print(data, size);Heap(data, size);cout << "排序结果:";Print(data, size);return 0;
}
输出结果

相关文章:
排序算法-堆积树排序法(HeapSort)
目录 排序算法-堆积树排序法(HeapSort) 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法(HeapSort) 1、说明 堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序…...
名词解释 MongoDB
MongoDB 是一个面向文档的数据库管理系统,它不使用传统的表格结构,而是将数据组织成类似文档的形式,通常使用JSON格式。 文档数据库:数据以文档的形式存储,每个文档可以包含不同的字段,就像一个文件可以包…...
Look Back(cf div3 905)
题意:给你一个长度为n((1≤n≤10^5)数组a[],你可以进行一个操作 使a[i]a[i]*2,问最少经过多少次这样的操作使的a[]不递减,a[i]>a[i-1]。 输入样例: 6 1 1 2 1 1 3 1 2 1 4 2 3 2 1 5 4 5 4 5 4 10 1 7 7 2 3 4 3 2 1 100 输出…...
Spring框架的发展历程
Spring框架的发展历程 自2004年以来,Spring框架已经成为Java开发人员最受欢迎的开源框架之一。它提供了一个全面的编程和配置模型,旨在简化企业级Java应用程序的开发过程。本文将详细介绍Spring框架的发展历程,以及它如何为Java开发人员提供…...
vue 级联查询5级--省/市/区/街道/社区
<template> <div> 1234 <el-select v-model="provinceVal" @change="selectProvinceFn" placeholder="请选择"> <el-option v-for="item in provinceList" :key="item.code" :label="item.name&q…...
C++并发与多线程(8) | 互斥量
一、互斥量(mutex)的基本概念 互斥量(Mutex)是一种用于多线程编程的同步机制,用于管理共享资源的访问,以确保线程之间不会同时访问某个共享资源,从而避免竞态条件(Race Condition)和数据损坏。下面是互斥量的基本概念: 互斥性(Mutual Exclusion):互斥量用于确保一…...
Power BI 傻瓜入门 3. 选择Power BI的版本
本章内容包括: Excel与Power BI的比较选择Power BI的桌面版和服务版之间的差异了解Microsoft提供的许可选项 挑选正确版本的Power BI可能就像参观世界上最大的糖果店:你可以从许多细微差别的替代品中进行选择。选择可以归结为想要、需要、规模…...
BadNets:基于数据投毒的模型后门攻击代码(Pytorch)以MNIST为例
加载数据集 # 载入MNIST训练集和测试集 transform transforms.Compose([transforms.ToTensor(),]) train_loader datasets.MNIST(rootdata,transformtransform,trainTrue,downloadTrue) test_loader datasets.MNIST(rootdata,transformtransform,trainFalse) # 可视化样本 …...
freeRTOS内部机制——栈的作用
上图中*pa 和*pb分别为R0,R1,调用C函数时,第一个参数保存在R0中第二个参数保存在R1中。这是约定。 指令保存在哪里? 指令保存在flash上面 LR等于什么? LR是返回地址,函数执行完了过后LR等于下一条指令的地址 运行…...
python 桌面软件开发-matplotlib画图鼠标缩放拖动
继上一篇在 Java 中缩放拖动图片后,在python matplotlib中也来实现一个自由缩放拖动的例子: python matplotlib 中缩放,较为简单,只需要通过设置要显示的 x y坐标的显示范围即可。基于此,实现一个鼠标监听回调…...
【JavaScript基础】JavaScript头等函数的理解
彻底理解JavaScript头等函数 一、函数的理解 🔥 什么是函数? 一般来说,一个函数是可以通过外部代码 调用 的一个“子程序”(或在递归的情况下由内部函数调用)。像程序本身一样,一个函数由称为函数体的一…...
如何把项目上传到Gitee(详细教程)
找到项目根目录右键打开Git Bash Here 输入命令:git init 回车 输入命令:git status 输入命令:git add . 输入命令:git status git commit -m 项目描述 在Gitee官网注册好账号后,git 新建项目 填写补充git项目信息及…...
Ubuntu挂载windows下的共享文件夹
Ubuntu挂载windows下的共享文件夹 更新apt源 如果出现安装失败,需要更新apt源为阿里云 # 备份原始文件 sudo cp /etc/apt/sources.list.d/* /etc/apt/sources.list.d.bak/# 修改文件内容 sudo vim /etc/apt/sources.list# 替换内容为如下 deb https://mirrors.al…...
什么是WMS系统条码化管理
WMS系统是一种用于仓库管理的信息化系统,旨在提高仓库操作的效率和准确性。而在WMS系统中,条码化管理是一项关键的技术和方法,它通过将商品和物料打上条码,并利用扫描设备进行数据采集和处理,实现了仓库管理的全面自动…...
【云原生之kubernetes实战】在k8s环境下部署moredoc文库系统
【云原生之kubernetes实战】在k8s环境下部署moredoc文库系统 一、moredoc介绍1.1 moredoc简介1.2 moredoc技术栈二、本次实践介绍2.1 本次实践简介2.2 本次环境规划三、检查k8s环境3.1 检查工作节点状态3.2 检查系统pod状态四、创建mysql的secret资源4.1 创建部署目录4.2 创建密…...
[Database] MySQL 8.x Window / Partition Function (窗口/分区函数)
🧲相关文章 [1] MySQL 系统表解析以及各项指标查询 [2] MySQL 5.7 JSON 字段的使用的处理 [3] MySQL经典练习50题 简介 MySQL 8.0版本开始支持窗口函数 官方文档 在之前的版本中已存在的大部分聚合函数,在MySQL 8 中也可以作为窗口函数来使用 方法 / …...
openGauss Meetup(天津站)精彩回顾 | openGauss天津用户组正式成立
由openGauss社区、天开发展集团、天津市软件行业协会、天大智图(天津)科技有限公司联合主办的“openGauss Meetup • 天津站”已于10月13日落下帷幕,此次活动邀请到众多业内技术专家,从技术创新、学术创新、发展创新、以及生态共建…...
linux vim 删除多行
使用linux服务器,免不了和vi编辑打交道,命令行下删除数量少还好,如果删除很多,光靠删除键一点点删除真的是头痛,还好Vi有快捷的命令可以删除多行、范围。 删除行 在Vim中删除一行的命令是dd。 以下是删除行的分步说明…...
低概率Bug,研发敷衍说复现不到
测试工作中,经常会遇到一些低概率出现的问题,如果再是个严重问题,那测试人员的压力无疑是很大的,一方面是因为低概率难以复现,另一面则是来自项目组的压力。 如何在测试时减少此类问题的重复投入,我的思考如…...
Web前端免费接入Microsoft Azure AI文本翻译,享每月2百万个字符的翻译
Azure 文本翻译是 Azure AI 翻译服务的一项基于云的 REST API 功能。 文本翻译 API 支持实时快速准确地进行源到目标文本翻译。 文本翻译软件开发工具包 (SDK) 是一组库和工具,可用于轻松地将文本翻译 REST API 功能集成到应用程序中。 文本翻译 SDK 可跨 C#/.NET、…...
Pixel Aurora Engine效果展示:‘进化像素’设计哲学下的10组对比作品集
Pixel Aurora Engine效果展示:‘进化像素’设计哲学下的10组对比作品集 1. 像素极光引擎概览 Pixel Aurora Engine是一款基于AI扩散模型的高端像素艺术生成工具。它采用独特的复古像素游戏风格界面设计,将现代AI技术与经典8-bit美学完美融合。这款工具…...
【Ubuntu20.04】libudev-dev依赖冲突排查与修复指南
1. 遇到libudev-dev安装问题怎么办? 最近在Ubuntu 20.04上安装libudev-dev时,你是不是也遇到了烦人的依赖冲突?作为一个长期使用Ubuntu的老用户,我完全理解这种挫败感。记得我第一次遇到这个问题时,系统提示"无法…...
智能音乐情绪生成器:当AI遇见音乐,用代码谱写情感旋律
引言:音乐与情感的数字化探索音乐是人类情感最直接的表达方式之一,欢快的旋律让人振奋,悲伤的曲调令人沉思。在人工智能时代,我们能否让机器理解情感,并创作出符合特定情绪的音乐?本文将带你走进一个融合了…...
像素剧本圣殿保姆级教程:从零配置到输出标准格式剧本的5步详解
像素剧本圣殿保姆级教程:从零配置到输出标准格式剧本的5步详解 1. 认识像素剧本圣殿 像素剧本圣殿是一款专为剧本创作者设计的AI辅助工具,它基于强大的Qwen2.5-14B-Instruct模型进行深度优化,特别适合需要快速生成专业格式剧本的创作者。与…...
【衢州学院主办,上海交通大学协办 | IET出版(有ISSN号) | 往届两年已完成 EI 、 IEEE Xplore检索 | 大咖组委】第三届人工智能与电力系统国际学术会议(AIPS 2026)
第三届人工智能与电力系统国际学术会议(AIPS 2026) 2026 3rd International Conference on Artificial Intelligence and Power System 大会官网:www.icaips.org【参会投稿】 大会时间:2026年5月22-24日 大会地点:中国-浙江-衢…...
Qwen3.5-9B商业落地实践:电商客服图文理解+多轮需求确认系统
Qwen3.5-9B商业落地实践:电商客服图文理解多轮需求确认系统 1. 项目概述与核心价值 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,在电商客服场景中展现出强大的商业应用价值。该系统通过多模态理解和长上下文支持能力,能够同时处理文字和…...
如何在Windows 11 LTSC中快速安装微软商店:完整免费指南
如何在Windows 11 LTSC中快速安装微软商店:完整免费指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 LTSC版本以其卓越的稳…...
W25Q16 Flash存储器的5个常见应用场景及避坑指南
W25Q16 Flash存储器的5个常见应用场景及避坑指南 在嵌入式系统开发中,数据存储一直是个绕不开的话题。想象一下,你花了一周时间调试的设备,重启后所有用户设置都消失了;或者精心设计的UI界面,因为字库加载失败变成了乱…...
ai生成代码如何管理?快马结合gitbash实现智能开发工作流
今天想和大家分享一个高效的工作流:如何用AI生成代码后,通过GitBash进行规范的版本管理。最近在InsCode(快马)平台实践了这个方法,整个过程非常流畅。 AI生成代码阶段 在快马的AI对话区输入需求:“创建一个带有深色模式切换功能的…...
实战指南:利用快马平台为不同项目类型智能定制idea开发环境与工具链
今天想和大家分享一个实战经验:如何根据不同项目类型,快速定制专属的IDEA开发环境。作为开发者,我们经常需要切换不同技术栈,每次手动安装插件、配置SDK的过程实在太费时间。最近发现用InsCode(快马)平台可以智能解决这个问题&…...
