选择排序之大根堆
大根堆:树的根节点大于左右子树的结点值,这样就能保证每次从树根取的是最大值
灵魂在于HeadAdjust函数,以某节点为树根通过下落调整为大根堆,
建树思想 就是,从最后一个非终端结点开始调整以该结点为根的子树, 通过HeadAdjusth函数下落实现
排序:因为树根是最大值,每次取数根,然后与树最后一个结点交换,然后将这个点固定,树的结点数减一,调整根节点这棵树重新变为大根堆,重复依次。
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f
void swap(int &a, int &b){int tmp=a;a=b;b=tmp;
}
//子树头节点的下落
void HeadAdjust(int a[], int k, int len){a[0]=a[k];//暂存子树头结点//一直下落,找到最终位置 for(int i=k*2; i<=len; i*=2){if(i<len && a[i+1]>a[i])i++;//从左右儿子中找到一个最大儿子 if(a[0]>=a[i])break;//找到了最终下落位置 else{//孩子比他大,就下落 a[k]=a[i];k=i;}}a[k]=a[0];//给找到的结点写回值
}
void BuildMaxHeap(int a[], int len){//a数组从1开始存//从最后一个非终端结点开始调整,下落; for(int i=len/2; i>=1; i--){HeadAdjust(a, i, len);}
}
void HeadSort(int a[], int len){BuildMaxHeap(a, len);//建大根堆 //每次将数跟也就是最大元素与最后一个元素交换,//再调整大根堆,每次就能确定一个未确定的最大数 for(int i=len; i>1; i--){swap(a[i], a[1]);//把最大的结点1放到树末 HeadAdjust(a, 1, i-1);//每次确定一个最大数,未确定数就少一个 }
}
int main()
{int a[100];int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}HeadSort(a, n);for(int i=1;i<=n;i++)cout<<a[i]<<endl;return 0;
}
相关文章:
选择排序之大根堆
大根堆:树的根节点大于左右子树的结点值,这样就能保证每次从树根取的是最大值 灵魂在于HeadAdjust函数,以某节点为树根通过下落调整为大根堆, 建树思想 就是,从最后一个非终端结点开始调整以该结点为根的子树&#x…...
AI的魔力:如何为开源软件注入智慧,开启无限可能
“AI的魔力:如何为开源软件注入智慧,开启无限可能” 引言: 在科技发展的浪潮中,开源软件生态一直扮演着推动创新与共享的重要角色。从Linux到Python,开源项目赋予了开发者全球协作的机会,推动了技术的飞速…...
如何在 VPS 上使用 Git 设置自动部署
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 要了解 Git 的基本知识以及如何安装,请参考介绍教程。 本文将教你如何在部署应用程序时使用 Git。虽然有许多使用 Gi…...
Linux下的三种 IO 复用
目录 一、Select 1、函数 API 2、使用限制 3、使用 Demo 二、Poll 三、epoll 0、 实现原理 1、函数 API 2、简单代码模板 3、LT/ET 使用过程 (1)LT 水平触发 (2)ET边沿触发 4、使用 Demo 四、参考链接 一、Select 在…...
通过 SSH 进行WordPress网站的高级服务器管理
我在管理hostease的服务器时,时常需要通过SSH登录服务器进行修改。而在网站管理中,SSH不仅是一个基础工具,更是高级用户用来精细化管理和优化服务器的重要工具。通过SSH,你可以深入监控服务器的性能、精细管理系统资源,…...
速盾高防cdn支持移动端独立缓存
随着移动互联网的快速发展,移动端网页访问量也越来越大。然而,移动端的网络环境相对不稳定,用户体验可能会受到影响。因此,使用高防CDN来加速移动端网页访问,成为越来越多网站运营者的首选。 速盾高防CDN是一种分布式…...
PMP–一、二、三模、冲刺–分类–8.质量管理
文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准,到底有没有满足质量需求,看质量标准即可。6、 [单选] 自项目开始以来,作为项目经理同事的职能经理一直公开反对该项目,在讨论项目里…...
如何快速使用Unity 的UPR---1资源检测保姆级
关于我们的性能检测工具已经有很多了,比如UWA的或者是我们的Unity 的UPR 都是很好的,今天说一下UPR吧 官方网址 :UPR - Unity专业性能优化工具 这个是官方给的Demo 选择你的平台就可以 这个可以作为一个参考但是不是很建议用官方的因为我们…...
pytorch中的.clone() 和 .detach()
在PyTorch中,.clone() 和 .detach() 是两个用于处理张量(Tensor)的方法,它们各自有不同的用途: .clone(): .clone() 方法用于创建一个张量的副本(深拷贝)。这意味着原始张量和新张量…...
三十二:网络爬虫的工作原理与应对方式
随着互联网的快速发展,网络爬虫(Web Crawlers)作为一种自动化工具,被广泛应用于搜索引擎、数据采集、网站监控等领域。网络爬虫的作用是通过自动化程序,模拟人类浏览网页的行为,自动下载和解析网页内容&…...
nodejs相关知识介绍
1、nodejs官方文档: https://nodejs.org/zh-cn nodejs可以用nvm进入安装; 2、npm说明: npm官方教程:https://npm.p2hp.com/ npm是 Node.js 的标准包管理器,也就是说nodejs安装好,npm也就安装好了&#…...
MySQL排它锁
MySQL排它锁原理 MySQL中的排它锁(Exclusive Lock),也称为独占锁,是一种确保在事务期间,其他事务无法对锁定数据进行读取或修改的锁机制。当一个事务对某一行数据加上排它锁后,其他事务无法对该行数据进行…...
HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)
文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…...
Vue3 Ts 如何获取组件的类型
vue3 Ts ref 子组件 1、默认写法 typeof:获取ts类型 InstanceType:获取模版的实例 <tempolate><myComponent ref"myCompRef"> </tempolate><script setup lang"ts"> import { ref } from "vue&quo…...
RAG数据拆分之PDF
引言RAG数据简介PDF解析方法及工具代码实现总结 二、正文内容 引言 本文将介绍如何将RAG数据拆分至PDF格式,并探讨PDF解析的方法和工具,最后提供代码示例。 RAG数据简介 RAG(关系型属性图)是一种用于表示实体及其关系的图数据…...
【算法day1】数组:双指针算法
题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜…...
Ubuntu 22.04 离线安装软件包
在使用最小化安装时,默认是不带有vim 或者nano编辑器的,如果你的环境不能上外网就需要离线安装。 首先你需要先找一台可以上网的ubuntu系统(虚拟机搭建也行),下载所有的依赖包,然后上传到需要安装的服务器…...
网络安全——浅谈HTTP协议
HTTP请求 HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。 HTTP请求由状态行、请求头、请求正文三部分组成: 状态行:包括请求方式Method、资源路径URL、协议版本Version;请求头:包括一些访问的域名、…...
鸿蒙开发-在ArkTS中制作音乐播放器
音频播放功能实现 导入音频播放相关模块 首先需要从ohos.multimedia.audio模块中导入必要的类和接口用于音频播放。例如: import audio from ohos.multimedia.audio;创建音频播放器实例并设置播放源 可以通过audio.createAudioPlayer()方法创建一个音频播放器实…...
Rust学习笔记_03——元组
Rust学习笔记_01——基础 Rust学习笔记_02——数组 Rust学习笔记_03——元组 文章目录 Rust学习笔记_03——元组元组1. 定义元祖2. 访问元组中的元素3. 元组的解构4. 元组不可遍历和切片5. 元组作为函数返回值6. 单元元组7. 代码演示 元组 在Rust编程语言中,元组&a…...
如何通过League-Toolkit实现英雄联盟全流程效率提升?
如何通过League-Toolkit实现英雄联盟全流程效率提升? 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联…...
AXI非对齐访问实战指南:从WSTRB信号到DMA数据搬运的避坑细节
AXI非对齐访问实战指南:从WSTRB信号到DMA数据搬运的避坑细节 在FPGA与ASIC设计中,AXI总线作为AMBA协议族的核心成员,其非对齐访问特性常被开发者视为"双刃剑"。当处理摄像头YUV数据、音频采样流或网络封包等非规整数据时࿰…...
CentOS 7 编译 Linux 5.15 内核遇 BTF 报错?别慌,这份保姆级排错指南帮你搞定 dwarves 和 pahole
CentOS 7 编译 Linux 5.15 内核 BTF 报错全攻略:从 dwarves 编译到环境修复 在 CentOS 7 上手动编译较新版本的 Linux 内核(如 5.15 系列)时,启用 BTF(BPF Type Format)功能经常会遇到各种依赖问题。本文将…...
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十七):Boot 3 → Boot 4 迁移避坑指南——那些文档不会告诉你的迁移血泪史
系列导航 | ← 上一篇:D16 Spring Boot 4 + AI推理后端集成 | 下一篇:D18 云原生部署:Docker + K8s + GraalVM → 适用读者:正在从 Spring Boot 3.x 升级到 4.x 的开发者,或在评估升级可行性的架构师。 前置知识:熟悉 Spring Boot 3.x 开发,了解 JDK 21+ 基本特性。 本文…...
MOVA开源:AI同步生成音视频的全新突破
MOVA开源:AI同步生成音视频的全新突破 【免费下载链接】MOVA-360p 项目地址: https://ai.gitcode.com/OpenMOSS/MOVA-360p 导语:MOVA-360p模型正式开源,标志着AI音视频生成领域告别"无声时代",首次实现视频与音…...
ChatTTS合成速度优化实战:从音频流处理到并行计算
最近在项目中用到了ChatTTS进行语音合成,效果确实不错,但遇到一个很实际的问题:合成速度太慢,尤其是处理长文本时,等待时间让人有点抓狂。于是花了一些时间研究优化方案,把整个探索过程和最终落地的方案记录…...
SEO_快速见效的页面SEO优化检查清单与方法
SEO: 快速见效的页面SEO优化检查清单与方法 在当前的互联网环境中,搜索引擎优化(SEO)已经成为了每个网站运营者必须掌握的技能。特别是在百度这样的主流搜索引擎中,优化页面的SEO不仅能提升网站的流量,还能显著增加用户…...
YOLOv8工业部署翻车实录:6类典型报错日志解析,附可直接复用的CI/CD流水线脚本
第一章:YOLOv8工业部署翻车实录:6类典型报错日志解析,附可直接复用的CI/CD流水线脚本模型导出阶段:ONNX Shape Inference 失败 当执行 yolo export modelyolov8n.pt formatonnx opset12 时,常见报错:Runtim…...
辅助用电系统安装:工业项目电力配套的关键环节问题全解析
在工业厂房、园区配套、商业综合体、仓储物流中心以及各类生产型项目中,很多人一提到电气工程,第一反应往往是高压配电、变压器、动力柜或者主供电系统。但真正决定项目是否“好用、稳用、久用”的,往往不是主系统本身,而是隐藏在…...
3大核心价值:让你的Markdown文档呈现专业级视觉体验
3大核心价值:让你的Markdown文档呈现专业级视觉体验 【免费下载链接】github-markdown-css The minimal amount of CSS to replicate the GitHub Markdown style 项目地址: https://gitcode.com/gh_mirrors/gi/github-markdown-css 面向开发者与文档创作者的…...
