网站建设总结建设官方网站

深圳市方杰网络科技有限公司 2026/09/09 20:26:15

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、堆排序定义
  • 二、时间复杂度
  • 三、实现思路
    • 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个最小的数同理可得。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

淄博网站建设网站建设论坛

AI绘图革命!Stable Diffusion 3.5 FP8爆款秘籍大公开,8倍速出图神操作!AI绘图领域突发大地震!Stable Diffu

2026/06/30 14:18:39

无锡网站建设龙岩网站建设

当测试遇见产品思维在敏捷与DevOps深度渗透的2026年,软件测试团队正面临战略定位重构。传统"缺陷猎人"角色已无法满足数字化产品的迭代需求。本文基于行业调研与实战案例

2026/06/30 12:34:32

河北网站建设新乡网站建设

YOLOv8 Git下载加速技巧:使用国内镜像代理在深度学习项目开发中,环境搭建往往是最先遇到的“拦路虎”。尤其是当我们想快速上手像YOLOv8这样功能强大但依赖复杂的开源

2026/06/30 12:12:59

合肥网站建设巴中网站建设

在其他地方查看文章:Python全局环境和虚拟环境(venv) - Liu Zijian's Blog - 一个个人博客网站1.概述在进行python

2026/06/30 13:37:06

杭州营销型网站建设莆田网站建设

彻底解决Keil5中文乱码:从系统设置到编码规范的实战指南在嵌入式开发圈里,有一个问题几乎每个用过Keil MDK(uVision)的中国开发者

2026/06/30 14:02:38

静安网站建设巴中网站建设

如何用10篇高质量博客为GPU租赁业务带来持续订单在AI模型训练动辄需要上百小时、科研团队争分夺秒抢算力的今天,一个开发者最怕什么?不是代码报错,也不是数据不

2026/06/30 09:50:17

网站建设合同行业网站建设

7大AI论文工具核心对比工具名称核心功能查重优化适用场景效率评分AiBiye论文全流程辅助智能降重从选题到定稿★★★★★AiCheck查重与降重深度降重算法论文修改阶段★★★★☆AskPaper文献阅

2026/06/30 12:47:33