当前位置: 首页 > news >正文

堆排序和topk问题

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、堆排序定义
  • 二、时间复杂度
  • 三、实现思路
    • a.注意(升/降)
  • 四、topk问题

前言

常见的基本排序算法有冒泡、选择、插入,但效率太低。
堆排序和快速排序算法则是相对高效的算法。这篇主要先介绍堆排序


一、堆排序定义

堆排序就是借助(大/小)堆的特性,实现的快速排序

二、时间复杂度

时间复杂度:N * log2
本质就是建堆后,借助堆来调整N个数的位置,每次调整时间为堆高度log2

三、实现思路

(以小堆为例)

  1. 先将数据建小堆,此时堆顶是最小值。
  2. 将堆顶元素与数组末尾的元素交换,此时最小值被放到数组末尾。
  3. 将堆的有效长度-1,末尾元素视为已排序,不参与后续调整。
  4. 对堆顶的元素进行向下调整,使其重新满足小堆的特性
  5. 重复上述过程,直到堆的有效长度为1
//实现堆排序————时间复杂度:N * logN (一次向下调整是N, 执行N次)voidHeapSort(int*a,intn){//1、建堆for(inti=(n-1-1)/2;i>=0;i--)//需要从最后一个节点的父亲节点,开始向下调整{AdjustDown(a,n,i);}//2、将排序好的最小值,排出堆排序的范围intend=n-1;//3、再一直对根节点实现向下调整while(end>0){swap(&a[0],&a[end]);//再次选择最小的值AdjustDown(a,end,0);end--;}}

至此,实现了数组的降序排列

a.注意(升/降)

排升序,建大堆
排降序,建小堆

因为每次堆顶会和数组末尾的元素交换


四、topk问题

N个数中找出最大或最小的前K个数?

最优方案:建立一个K的数的堆。
如果想找K个最大数就建小堆,想找K个最小数就建大堆
(以小堆为例)

遍历N-K个数,凡是比堆顶大的数就替换堆顶数据,进堆向下调整。
(因为堆顶的数总是较小的)最后剩下的k个数就是前K个最大的数。

前K个最小的数同理可得。

http://www.rkmt.cn/news/132441.html

相关文章:

  • 这段代码中的 ttl是做什么的
  • 2025年终优选:0-16岁儿童鞋服宝藏品牌大公开 - 品牌测评鉴赏家
  • Java计算机毕设之基于springboot的物业报修系统的设计与实现住户信息管理、报修处理、费用收缴(完整前后端代码+说明文档+LW,调试定制等)
  • 【MTSP问题】基于螳螂虾算法MShOA求解单仓库多旅行商问题附Matlab代码
  • 视频播放器PotPlayer下载安装教程:超详细图文步骤(PC+安卓)
  • C#之Modbus-RTU通讯-读取输出寄存器-整数
  • 【路径规划】基于RRT算法结合卡尔曼滤波器相实现定位不确定环境下移动机器人路径规划附matlab代码
  • Java毕设选题推荐:基于springboot的幼儿园管理系统的设计与实现幼儿信息管理(基本资料、健康档案、接送记录)【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 完整教程:npu_moe_distribute_combine算子代码分析
  • python多表关联防注入sql
  • 解锁大模型“能干活“的秘诀:RAG×MoE技术组合深度解析
  • 2025 --【J+S 二十连测】-- 第十二套 总结+题解
  • 深入解析MySQL事务与锁:构建高并发数据系统的基石
  • 大模型微调资源合集
  • 基于CNN(卷积神经网路)-BiLSTM(双向长短期记忆网络)-Attention(注意力机制)的时间序列预测python代码
  • EI顶刊复现:基于氨储能技术的电转氨耦合风–光–火综合能源系统双层优化调度附Matlab代码
  • 2025.12.21博客
  • 实用指南:【threejs】材质共享导致的典型问题
  • Vue.js + Element UI 实战:企业级后台管理系统开发全流程
  • 【漏水定位】基于压力测量和拓扑信息实现的稳健数据驱动漏水定位附Matlab代码
  • 0-16岁儿童鞋服品牌全解析:从高端到平价,总有一款适合你家宝贝 - 品牌测评鉴赏家
  • Java毕设项目推荐-基于Springboot的乡政府管理系统设计与实现基于springboot的村务管理系统的设计与实现【附源码+文档,调试定制服务】
  • 2025年12月男生女生童装鞋子质量评测报告 - 品牌测评鉴赏家
  • SoundFlow 开源 .NET 音频引擎
  • centos7.9上面卸载中文语言包和中文字体重新安装
  • 基于Python大数据的主流汽车价格分析可视化体系
  • 2025年家长必看!儿童鞋服品牌排行榜前十名权威盘点,这些品牌凭什么征服千万家庭? - 品牌测评鉴赏家
  • Java毕设项目推荐-基于SpringBoot+Vue游泳用品专卖店商城平台设计与实现基于springboot的游泳用品专卖店系统的设计与实现【附源码+文档,调试定制服务】
  • 基于SpringBoot的智能家居控制系统的设计与实现
  • 2025年12月男生女生童装品牌深度评测:高性价比与质量的双重保障 - 品牌测评鉴赏家