排序——堆排序
一、概念及结构堆是一种特殊的树形数据结构通常表现为一棵完全二叉树是用二叉树的顺序存储方式来存储元素的。堆分为小堆和大堆1.1 小堆父结点小于子结点但是父结点下面的两个子结点没大小区分。1.2 大堆父结点大于子结点但是父结点下面的两个子结点没大小区分。二、建堆小堆示例2.1 向上调整建堆适用于一边插入一边建堆的情况。插入节点后找到它的父结点让父结点与它进行比较如果小于它则退出如果大于则交换位置重复上述操作直至循环结束或跳出循环。void AdjustUp(int* arr, int child) { int parent (child - 1) / 2; while (child 0) { if (arr[child] arr[parent])//改为 建大堆 { Swap(arr[child], arr[parent]); child parent; parent (child - 1) / 2; } else { break; } } }注Swap是交换位置函数。void Swap(int* p1, int* p2) { int temp *p1; *p1 *p2; *p2 temp; }2.2 向下调整建堆适用于对父节点进行调整。先找到较小的那个孩子让该孩子与它进行比较如果孩子大于它则退出如果小于则交换位置重复上述操作直至循环结束或跳出循环。void AdjustDown(int* arr, int n, int parent) { int child (parent * 2) 1;//先默认找到左孩子 while (child n) { //判断左孩子是否大于右孩子child 1 n防止非法访问 if (child 1 n arr[child 1] arr[child]) child; if (arr[parent] arr[child]) { Swap(arr[parent], arr[child]); parent child; child (parent * 2) 1; } else { break; } } }三、TOPK问题TOPK问题即求数据结合中前K个最大的元素或者最小的元素。一般来说数据量比较大。如果有一个数组数组里有N个数据我们要找最大的前K个数据要怎么做呢3.1 法一先整体建立一个大堆然后让根节点与该堆的最后一个节点交换然后拿取该堆最后的结点再让根结点向下调整。重复上述操作K次。void Heapsort(int* a, int n) { int k 0; scanf(%d, k); for (int i 0; i n; i) AdjustUp(a, i); while (k--) { Swap(a[n - 1], a[0]); AdjustDown(a, n - 1, 0); n--; } }3.2 法二先从数组中取前k个数建立一个小堆然后遍历后面的元素后与堆顶元素比较如果大于则进行交换然后向下调整。最后拿出该堆即可。void Heapsort(int* a, int n) { int k 0; scanf(%d, k); for (int i (k - 2) / 2; i 0; i--) AdjustDown(a, k, i); for (int i k; i n; i) { if (a[i] a[0]) { Swap(a[i], a[0]); AdjustDown(a, k, 0); } } }(k - 2) / 2是为了拿到该堆中最后一个父节点的下标子节点的下标求出父节点的下标的公式是 (i - 1) / 2 但是这里 k - 1 先当于是最后一个孩子节点的下标所以是 (k - 2) / 2。

相关新闻

学习windows系统服务安全

学习windows系统服务安全

文章中提到的所有操作皆在靶场中进行的永恒之蓝的操作原理是利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。 操作机制是在SMB服务器处理SMB v1请求时发生的漏洞,通过这个漏洞潜入目标系统输入执行任意代码。解释一下什…

2026/5/17 12:56:57 阅读更多 →
10个Python自动化脚本,帮你每天省下2小时工作时间

10个Python自动化脚本,帮你每天省下2小时工作时间

10个Python自动化脚本,帮你每天省下2小时工作时间 作为开发者,我们每天都会遇到很多重复机械的工作:批量处理文件、整理数据、发邮件、下载资源等等。这些工作消耗了大量时间,其实都可以用Python脚本自动化搞定。今天分享10个我日…

2026/7/3 3:48:17 阅读更多 →
产业园招商如何精准触达“隐形冠军”企业?——方寸产研的靶向策略解析

产业园招商如何精准触达“隐形冠军”企业?——方寸产研的靶向策略解析

文 | 方寸产研在区域经济高质量发展的蓝图中,园区是产业聚集的核心载体,是项目落地、产业升级的关键舞台。然而,面对日益激烈的区域竞争与不断变化的产业态势,如何精准捕获优质项目,如何高效促成项目落地生根、开花结果…

2026/5/17 12:56:57 阅读更多 →

最新新闻

字段太多看不全,ksql 的展开模式和输出控制怎么用

字段太多看不全,ksql 的展开模式和输出控制怎么用

MySQL 里查宽表,字段多了输出就会折行,列对应关系容易看乱。MySQL 的解法是在 SQL 末尾加 \G,把每行的字段竖着列出来。ksql 里处理这个问题的方式不同——通过几个元命令控制整个会话的输出行为,不用每条 SQL 末尾单独加。 这篇在…

2026/7/3 3:50:58 阅读更多 →
抓包、TLS 指纹、UA 一致性分析工具

抓包、TLS 指纹、UA 一致性分析工具

TLSFOWARD:一款集抓包、TLS指纹分析与UA一致性验证于一体的专业工具 在接口调试、浏览器环境分析、爬虫环境排查以及测试排查等场景中,抓包是一项非常基础且常见的操作。 然而,仅仅查看 HTTP 请求往往是不够的。因为 User-Agent 可以被修改&a…

2026/7/3 3:48:58 阅读更多 →
继承、重载与多态

继承、重载与多态

继承是C中的一个重要特性&#xff0c;它可以让我们从一个类的部分成员继承并新建立一个类&#xff0c;class <派生类名> : <继承方式(public/protected/private)> <基类名>例如&#xff1a;//基类 class Animal{eat(); sleep(); }//派生类 class Dog : publi…

2026/7/3 3:46:58 阅读更多 →
2026年AI网站设计公司排名,品牌视觉定制企业盘点

2026年AI网站设计公司排名,品牌视觉定制企业盘点

2026年AI网站设计公司排名&#xff0c;品牌视觉定制企业盘点一、品牌视觉定制市场的需求变化2026年&#xff0c;企业官网已经从“有就行”升级到了“好看且好用”。据艾瑞咨询联合IDC发布的《2026年中国企业数字化建站行业白皮书》显示&#xff0c;2026年中国网站建设行业整体市…

2026/7/3 3:44:57 阅读更多 →
DeepSeek-V4定价逻辑:隐性成本优化与企业级AI落地新范式

DeepSeek-V4定价逻辑:隐性成本优化与企业级AI落地新范式

1. 这不是“买菜砍价”&#xff0c;而是大模型时代的价格认知重构DeepSeek-V4发布后&#xff0c;朋友圈和开发者群最常刷屏的一句话是&#xff1a;“这价格&#xff0c;是不是标错了&#xff1f;”——不是调侃&#xff0c;是真有人反复刷新官网页面确认。我第一时间拉了三台不…

2026/7/3 3:42:57 阅读更多 →
5分钟掌握VinXiangQi:高效实用的AI象棋连线工具终极指南

5分钟掌握VinXiangQi:高效实用的AI象棋连线工具终极指南

5分钟掌握VinXiangQi&#xff1a;高效实用的AI象棋连线工具终极指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 你是否经常在网上对弈时遇到瓶颈&…

2026/7/3 3:42:56 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述&#xff1a;为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473&#xff0c;一个关于TLS/SSL协议重协商机制的漏洞&#xff0c;现在提起来还有必要吗&#xff1f;很多运维和开发朋友可能会觉得&#xff0c;这都老掉牙了&#xff0c;现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述&#xff1a;为什么需要双通道远程管理防火墙&#xff1f;在任何一个稍具规模的企业网络里&#xff0c;防火墙都是那个默默守护在边界的关键角色。作为网络工程师&#xff0c;我们不可能每次都跑到机房&#xff0c;插上console线去配置它。远程管理能力&#xff0c;…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述&#xff1a;AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域&#xff0c;同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件&#xff0c;与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻