首页 > 编程语言 >数据结构与算法从淬体到元婴day04之堆

数据结构与算法从淬体到元婴day04之堆

时间:2024-07-22 11:00:39浏览次数:12  
标签:下标 之堆 元素 day04 淬体 数组 操作 新元素 节点

堆的定义

堆是一种特殊的完全二叉树结构,其每个节点的值都遵循一定的堆属性。堆在物理上是通过数组实现的,逻辑上则表现为树形结构。

堆的性质

  • 堆总是一棵完全二叉树。
  • 堆中某个节点的值总是不大于(最大堆)或不小于(最小堆)其父节点的值。
  • 将根节点最大的堆称为最大堆或大根堆,根节点最小的堆称为最小堆或小根堆。

堆的表示(数组)

堆最常用的表示方式是使用数组。在数组中,根节点存放在数组的第一个位置(下标为0或1,具体取决于实现),然后通过计算可以方便地找到任意节点的父节点和子节点。

  • 父节点下标:对于数组中的任意节点i(假设根节点下标为0),其父节点的下标为(i-1)/2。
  • 左子节点下标:对于数组中的任意节点i,其左子节点的下标为2*i+1。
  • 右子节点下标:对于数组中的任意节点i,其右子节点的下标为2*i+2。

堆的基本操作

  • 插入操作:在堆的末尾添加一个新元素,然后通过“上浮”操作(shiftUp或heapifyUp)调整堆,以保持堆的性质。上浮操作是将新元素与其父节点比较,如果新元素大于其父节点(在最大堆中),则交换它们的位置,直到新元素到达正确的位置。
  • 删除操作:通常删除堆顶元素(即根节点),然后将堆的最后一个元素移动到堆顶,并通过“下沉”操作(shiftDown或heapifyDown)调整堆。下沉操作是将堆顶元素与其子节点比较,如果堆顶元素小于其子节点中的较大者(在最大堆中),则交换它们的位置,直到堆顶元素到达正确的位置。
  • 建堆操作:对于一组给定的数据,可以通过一系列的下沉操作将其构建成一个堆。通常从最后一个非叶子节点开始,依次对每个节点进行下沉操作,直到根节点。

堆的实现

 

 

堆排序的应用(堆排序)

堆排序是指将堆顶元素(最大或最小元素)与堆的最后一个元素交换,缩小堆的范围(通常是去掉最后一个元素),然后重新调整剩余的元素,将其调整为一个大顶堆,重复此过程直到堆的大小为1。

 

 

 

 

 

标签:下标,之堆,元素,day04,淬体,数组,操作,新元素,节点
From: https://blog.csdn.net/Wumingdegushi/article/details/140603519

相关文章

  • javaSE学习 day04
    目录1.数组1.1数组是什么1.2静态数组1.2.1数组的格式1.2.2数组的访问1.2.3获取数组的长度1.3动态数组1.3.1动态数组是什么1.3.2动态数组的格式 1.3.3默认值规则1.4数组的遍历1.4.1什么是数组的遍历1.4.2为什么要遍历1.4.3遍历的格式1.5综合案例1.5.1计算班级......
  • Web学习day04
    mybatis目录mybatis文章目录一、查询1.1结果映射1.2多条件查询1.3模糊查询二、XML书写规范三、动态SQL四、配置文件4.1settings标签4.2mappers标签4.3environments标签五、案例5.1数据表5.2实现类5.3mapper实现5.4工具类实现5.5XML动态SQL实现5.6XML配置......
  • Day04
    用户与权限[root@zabbixserver~]#ls/etc/passwd-l-rw-r--r--.1rootroot218910月252023/etc/passwd[root@zabbixserver~]#ls-l/etc/shadow----------.1rootroot122110月252023/etc/shadow[root@zabbixserver~]#ls/etc/group-l-rw-r--r--.1......
  • C++从淬体到元婴day10之模板
    2024/6/30模板概念:在C++中,模板是一种泛型编程的工具,它允许程序员编写与类型无关的代码。作用:通过使用模板,你可以编写一种可以处理多种数据类型的函数或类,而无需为每种数据类型编写单独的实现。分类:函数模板和类模板函数模板建立一个通用函数,其函数返回值类型和形参类......
  • 小宋的SpringCloud学习记录day04:DB静态工具
    1.查询用户的同时,查询出用户对应的所有地址在UserVo实体类里面添加一个集合用于接收Address地址@ApiModelProperty("用户收货地址")privateList<AddressVO>addresses; 接下来我们对业务层进行改造,要求我们在查询用户的时候把地址也查出来Controller层:@ApiO......
  • 五天搞定Mysql基础知识-Day04
    学习目标:        1、掌握内连接        2、掌握左连接和右连接        3、掌握自关联和子查询·第一章数据准备一、创建表,并向表插入数据第二章连接查询一、基本概念        1、当查询结果来源于多张表时,需要将多张表连接成一个大......
  • Day04 左侧菜单导航实现
    一.点击左侧菜单导航到对应的View页面1.首先在MyToDo项目中,创建出左侧菜单所有的View(视图)及对应的ViewModel(视图逻辑处理类)ViewViewModel首页IndexViewIndexViewModel待办事项ToDoViewToDoViewModel忘备录MemoViewMemoViewModel设置SettingsVi......
  • 常回家看看之堆溢出
    ......
  • Day04
    目录一、HTML(一)HTML介绍(二)HTML骨架标签(三)注释(四)常用标签一、HTML(一)HTML介绍Web前端三大核心技术HTML:负责网页的架构CSS:负责网页的格式、美化JS:负责网页的行为HTML的定义:HTML(超文本标记语言)是用来描述网页的一种语言,由一套标记标签组成。HTML标签:单标签<标签名>双标......
  • m2_day04 [线程]
    课程内容:线程的概念引用多线程的原因?如何实现线程?如何控制线程?线程类其它常用方法线程的概念线程所在包:java.lang.Thread理解程序进程线程之间的区别:程序:保存在物理介质中的代码片段​进程:一旦程序运行起来就变成了操作系统当中的一个进程......