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

第十六次博客打卡

今天学习的是经典算法,堆排序。
在这里插入图片描述
堆排序是一种基于堆数据结构的排序算法,以下是关于堆排序的详细介绍:

堆的定义和性质

  1. 定义

    • 堆通常是一个可以被看作完全二叉树的数组对象。在堆中,每个元素都有一个键值(key),并且堆分为两种类型:最大堆和最小堆。
  2. 性质

    • 堆的高度是[ \log_2n ](n是堆中元素的数量)。这是因为堆是完全二叉树,其高度和元素数量有这种对数关系。
    • 堆的存储结构一般采用数组,对于数组中的第i个元素(从1开始计数),它的左子节点是第2i个元素,右子节点是第2i + 1个元素,父节点是第[ \lfloor i/2 \rfloor ]个元素。这种存储方式可以方便地通过下标来访问元素的父子关系。

堆排序的算法步骤

  1. 构建堆(建堆)

    • 从最后一个非叶子节点开始(即数组中第[ \lfloor n/2 \rfloor ]个元素,n是数组长度),向前逐个调整节点,使其满足堆的性质。对于最大堆,如果一个节点的值小于它的子节点,就将它与较大的子节点交换,然后继续调整这个子节点,直到该子树满足最大堆的性质。
  2. 堆排序过程

    • 将堆顶元素(最大堆中是最大值,最小堆中是最小值)与堆的最后一个元素交换,这样最大值(或最小值)就到了它最终的位置。
    • 然后将堆的大小减1(因为最后一个位置已经排好序了),并且重新调整剩下的堆,使其满足堆的性质。这个过程重复进行,直到堆的大小为1,整个数组就变成了有序的。

堆排序的时间复杂度和空间复杂度

  1. 时间复杂度
    堆排序的总时间复杂度是O(nlogn)。
  2. 空间复杂度
    • 堆排序是一种原地排序算法,它只需要一个常数级别的额外空间来存储一些临时变量(如交换元素时的中间变量等),所以空间复杂度是O(1)。

堆排序在实际应用中,由于其时间复杂度稳定,且不需要额外的存储空间,被广泛用于一些对空间要求严格且需要稳定排序时间的场景。

http://www.xdnf.cn/news/330283.html

相关文章:

  • mindie近期报错总结
  • WordPress_depicter Sql注入漏洞复现(CVE-2025-2011)
  • LeetCode 267:回文排列 II —— Swift 解法全解析
  • 第一章:MySQL 索引基础
  • ZYNQ笔记(十八):VDMA VGA彩条显示
  • 软考错题(一)
  • 格式工厂:一站式多媒体文件转换专家
  • 全网通电视 1.0 | 支持安卓4系统的直播软件,提供众多港台高清频道
  • 深入理解 Pinia:从基础到进阶的完整指南
  • 从交互说明文档,到页面流程图设计全过程
  • bpftrace 中使用 bpf_trace_printk
  • Soft Mask(软遮罩)技术
  • 【多线程】用阻塞队列实现等待唤醒机制(Java实现)
  • Python中的global与nonlocal关键字详解
  • 【软件测试学习day6】WebDriver常用的API
  • Java后端开发day43--IO流(三)--缓冲流转换流序列化流
  • 如何在本地测试网站运行情况
  • Kubernetes生产实战:容器内无netstat时的7种端口排查方案
  • 如何理解参照权
  • 如何设置飞书多维表格,可以在扣子平台上使用
  • Python办公自动化应用(三)
  • 备注在开发中的重要作用
  • MySQL数据库高可用(MHA)详细方案与部署教程
  • 国标GB28181视频平台EasyGBS打造电力行业变电站高效智能视频监控解决方案
  • 统计匹配的二元组个数 - 华为OD机试真题(A卷、JavaScript题解)
  • 宝塔面板,删除项目后还能通过域名进行访问
  • 从人脸扫描到实时驱动,超写实数字分身技术解析
  • Go语言中的并发编程--详细讲解
  • 【赵渝强老师】TiDB的备份恢复策略
  • 将本地项目提交到新建的git仓库