c++堆排序-建堆-插入-删除-排序
本文以大根堆为例,用数组实现,它的nums[0]是数组最大值。
时间复杂度分析:
建堆o(n)
插入删除o(logn)
堆排序O(nlogn)
首先上代码
#include<bits/stdc++.h>using namespace std;
void down(vector<int>&nums, int idx, int n)
{//删除时和由数组创建堆时用到int leftidx = 2 * idx + 1;int rightidx = 2 * idx + 2;if (leftidx >= n && rightidx >= n)return;if (rightidx >= n && nums[idx] >= nums[leftidx])return;if (rightidx < n&&nums[idx] >= nums[leftidx] && nums[idx] >= nums[rightidx])return;if (rightidx >= n || nums[leftidx] >= nums[rightidx]){swap(nums[idx], nums[leftidx]);down(nums, leftidx, n);}else{swap(nums[idx], nums[rightidx]);down(nums, rightidx, n);}
}void up(vector<int>&nums, int idx)
{//上滤操作由插入元素时用到,此处使用vector动态数组,不考虑静态数组插入元素过多导致过界拷贝扩容问题。int faridx = (idx - 1) / 2;if (idx == 0 || nums[idx] <= nums[faridx])return;swap(nums[idx], nums[faridx]);up(nums, faridx);
}void heapfy(vector<int>&nums)
{int n = nums.size();for (int i = n - 1; i >= 0; --i){if (2 * i + 1 <= n - 1)down(nums, i,n);}}void heapinsert(vector<int>&nums,int val)
{nums.emplace_back(val);int n = nums.size();up(nums, n - 1);
}void heapdel(vector<int>&nums)
{int n = nums.size();nums[0] = nums[n - 1];nums.pop_back();--n;down(nums, 0, n - 1);
}
void heapsort(vector<int>&nums)
{int n = nums.size();while (n> 1){swap(nums[0], nums[n - 1]);down(nums, 0, n-1);--n;}
}int main()
{vector<int>nums = { 2,1,4,6,5,8,0,7};heapfy(nums);for (auto& num : nums)cout << num <<" ";cout << "建队完成"<<endl;heapinsert(nums, 9);for (auto& num : nums)cout << num << " ";cout << "插入完成"<<endl;heapdel(nums);for (auto& num : nums)cout << num << " ";cout << "删除完成"<<endl;heapsort(nums);for (auto& num : nums)cout << num << " ";cout << "排序完成,堆结构已破坏" << endl;
}
读者可以复制代码到编译器里运行一下试试,帮助理解
它的主要思路参考力扣官方讲解
LeetCode 力扣官方分享 | 最大堆的基本内容和堆排序 - 知乎 (zhihu.com)
相关文章:

c++堆排序-建堆-插入-删除-排序
本文以大根堆为例,用数组实现,它的nums[0]是数组最大值。 时间复杂度分析: 建堆o(n) 插入删除o(logn) 堆排序O(nlogn) 首先上代码 #include<bits/stdc.h>using namespace std; void down(vector<int>&nums, int idx, i…...

使用代理后pip install 出现ssl错误
window直接设置代理 httphttp://127.0.0.1:7890;httpshttp://127.0.0.1...

护眼灯什么价位的好?最具性价比的护眼台灯推荐
到了晚上光线比较弱,这时候就需要开灯,要是孩子需要近距离看字学习等等,给孩子选择的灯具要特别的重视。护眼灯就是目前颇受学生家长青睐的灯具之一,越来越多的人会购买一个护眼灯给自己的孩子让孩子能够在灯光下学习的时候&#…...

vue event bus 事件总线
vue event bus 事件总线 创建 工程: H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\08-事件总线-扩展 vue --version vue crea…...

深信服云桌面用户忘记密码后的处理
深信服云桌面用户忘记了密码,分两种情况,一个是忘记了登录深信服云桌面的密码,另外一个是忘记了进入操作系统的密码。 一、忘记了登录深信服云桌面的密码 登录虚拟桌面接入管理系统界面,在用户管理中选择用户后,点击后…...

Cocos Creator3.8 实战问题(一)cocos creator prefab 无法显示内容
问题描述: cocos creator prefab 无法显示内容, 或者只显示一部分内容。 creator编辑器中能看见: 预览时,看不见内容: **问题原因:** prefab node 所在的layer,默认是default。 解决方法&…...

朴素贝叶斯深度解码:从原理到深度学习应用
目录 一、简介贝叶斯定理的历史和重要性定义例子 朴素贝叶斯分类器的应用场景定义例子常见应用场景 二、贝叶斯定理基础条件概率定义例子 贝叶斯公式定义例子 三、朴素贝叶斯算法原理基本构成定义例子 分类过程定义例子 不同变体定义例子 四、朴素贝叶斯的种类高斯朴素贝叶斯&a…...
RUST 每日一省:闭包
Rust中的闭包是一种可以存入外层函数中变量或作为参数传递给其他函数的匿名函数。你可以在一个地方创建闭包,然后在不同的上下文环境中调用该闭包来完成运算。和一般的函数不同,闭包可以从定义它的作用域中捕获值。 语法 闭包由“||”和“{}”组合而成。…...
Ubuntu下文件的解压缩操作:常用zip和unzip
Ubuntu下文件的解\压缩 压缩一个文件夹为zip包,加参数-r: zip -r MyWeb.zip MyWeb需要排除目录里某个文件夹?例如我要去掉node_modules,以显著减小压缩包体积,此时该怎么做? zip -r MyWeb.zip ./MyWeb…...

Linux学习第22天:Linux中断驱动开发(一): 突如其来
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 中断作为驱动开发中很重要的一个概念,在实际的项目实践中经常用到。本节的主要内容包括中断简介、硬件原理分析、驱动程序开发及运行测试。其中驱动程…...

IDEA 2019 Springboot 3.1.3 运行异常
项目场景: 在IDEA 2019 中集成Springboot 3.1.3 框架,运行异常。 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…...

【JAVA】飞机大战
代码和图片放在这个地址了: https://gitee.com/r77683962/fighting/tree/master 最新的代码运行,可以有两架飞机,分别通过WASD(方向),F(发子弹);上下左右(控…...

Midjourney 生成油画技巧
基本 prompt oil painting, a cute corgi dog surrounded with colorful flowers技法 Pointillism 点描绘法 笔刷比较细,图像更精细 oil painting, a cute corgi dog surrounded with colorful flowers, pontillismImpasto 厚涂绘法 笔刷比较粗,图像…...

26559-2021 机械式停车设备 分类
声明 本文是学习GB-T 26559-2021 机械式停车设备 分类. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了机械式停车设备的分类及有关的型式、型号和适停汽车组别、尺寸及质量。 本文件适用于 GB/T 3730.1—2001定义的乘用车及商用…...

xxe攻击(XML外部实体)
1.定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 http://www.w3school.com.…...

大数据-hadoop
1.hadoop介绍 1.1 起源 1.2 版本 1.3生产环境版本选择 Hadoop三大发行版本:Apache、Cloudera、Hortonworks Apache版本最原始的版本 Cloudera在大型互联网企业中用的较多 Hortonworks文档较好 1.4架构 hadoop由三个模块组成 分布式存储HDFS 分布式计算MapReduce 资源调度引擎Y…...

容器启动报错
容器启动报错 docker: Error response from daemon: driver failed programming external connectivity on endpoint XXX 如下: 据百度: 在docker启动后在,再对防火墙firewalld进行操作,就会发生上述报错 详细原因:…...

求生之路2服务器搭建插件安装及详细的游戏参数配置教程linux
求生之路2服务器搭建插件安装及详细的游戏参数配置教程linux 大家好我是艾西,在上一篇文章中我用windows系统给搭建演示了一遍怎么搭建自己的L4D2游戏。 那么也有不少小伙伴想知道linux系统的搭建方式以及在这个过程中有什么区别。 那么艾西今天就跟大家分享下用lin…...

IntelliJ IDEA 左侧Commit栏不见了
1.点击File->Settings->Version Control->Commit 2.勾选Use non-modal commit interface...

使用自功率谱、互功率谱估计滤波器幅频特性
这段时间终于对工程中的随机信号的一般处理方式有点头绪了,功率谱密度估计是十分重要的方式之一,仍需继续深入细化相关内容。 示例:使用自功率谱、互功率谱估计滤波器幅频特性,自己实现 & Matlab自带函数实现。 clc;clear;cl…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...