Java数据结构与Java算法学习Day06---堆(简略笔记记录)

news2024/11/24 6:03:46

目录

一、堆 96

1.1堆的定义 96 

1.2堆的API设计 97

1.3堆---堆的插入方法 98

1.4堆---堆的删除最大元素方法 99

1.5堆---堆的测试 100

二、堆排序 101

2.1堆排序  101


一、堆 96

1.1堆的定义 96 

堆实际上也是利用数据结构实现的,用树实现的特殊结构,也是树的一种。

堆的特性:

特性1, 堆:完全二叉树

 

特性2,通过数组实现完全二叉树的表达:(利用数组来实现堆的这个二叉树)

下面的图就是表现的是上面完全二叉树的形式。

 

注:

1、已知结点的索引位置,便可知道其父结点和其两个子节点的索引位置。前提是完全二叉树

如果一个结点的位置为k,则它的父结点的位置为(k/2),它的子结点的位置为2k和(2k+1)。

例如:结点p,则其父结点索引位置为2,子结点的位置为8和9

2、根据索引的位置变换,实现结点层数的变化。

向上移动一层,就将k值变为原来的一半即k/2,如果想向下移动一层,就将k值变为原来的二倍(2k)或者二倍基础上再加1(2k+1)。

特性3,同一个结点下的两个子节点没有大小区分。

父结点的值要比其两个子结点的值大。 

二叉查找树:左子结点小于右子结点。.

堆:左子结点和右子结点之间没有大小区分。

1.2堆的API设计 97

这个地方错误,修改为:Heap<T extends Comparable<T>>

根据特性3,可以知道这个堆是个有序的树,索引需要这个Comparable<T>,来提供比较规则

本部分代码的实现在/heap/Heap中

1.3堆---堆的插入方法 98

堆的插入方法的实现的原理见文档P4。

1.4堆---堆的删除最大元素方法 99

最大元素:实际上就是堆的第一个值,即根结点就是最大的元素

根结点的删除的原理图请查看文档P6。

其中最不好处理的问题是:删除掉最大元素后,谁来替换最大元素的位置呢?

第一步:

虽然堆的特性是结点比其两个子结点大,但是并不知道哪个结点大。在这个地方采取一个巧的方法。将根结点先于左子树的最后一个元素与根结点进行交换。

第二步:

进行交换后,再将T进行删除。删除之后,此时的堆已经变成没有序了。需要对堆的序进行调整。

第三步:

通过对堆的下沉进行调整,使其变为有序。

 

 

 

代码部分的实现在/heap/Heap中

1.5堆---堆的测试 100

本部分代码实现在/test/HeapTest

二、堆排序 101

2.1堆排序  101

对堆的元素大小进行排序处理。

实现将原数据数组,构造成堆heap。102

实现堆的下沉方法。103 

根据待排序的数组来构造成一个堆,完成堆排序 103

测试代码 105

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(mac M1)Flutter环境搭建

下载Flutter SDK&#xff0c;需要科学上网。 将Flutter永久添加到PATH中 1 sudo vim ~/.bash_profile 打开文件 2 export PATHpwd/flutter/bin:$PATH 将这个添加到前几行环境变量设置中 3 :wq 退出vim 4 source ~/.bash_profile 配置马上生效命令 运行 flutter doctor 命令&a…

【Linux】yum的介绍和使用

本期主题&#xff1a;yum介绍和使用博客主页&#xff1a;小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限&#xff0c;出现错误希望大家不吝赐作为程序员&#xff0c;不会有人还没女朋友吧。 目录 &#x1f341;1.软件包是什么&#xff1f; &#x1f341;…

[附源码]Python计算机毕业设计Django小型银行管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Qwt开发笔记(二):Qwt基础框架介绍、折线图介绍、折线图Demo以及代码详解

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128194710 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

单片机硬件和软件延时、RTOS相对延时和绝对延时

已剪辑自: https://mp.weixin.qq.com/s/-RPLQn4KO9Aqu1fpfZeOKA 前不久有个读者在问关于延时的问题&#xff0c;大概就是问&#xff1a;软件延时和硬件延时是啥意思&#xff1f;做项目时他俩有什么区别&#xff1f; 今天就来讲讲关于硬件延时和软件延时的内容&#xff0c;以及…

[GitHub]将本地文件上传远程仓库(安装,创建SSHKey,上传远程仓库)

目录 什么是GitHub 注册账户以及创建仓库 安装Git 配置Git ​编辑 将本地项目上传远程仓库 创建本地仓库 创建远程仓库 克隆远程仓库到本地 什么是GitHub github是一个基于git的代码托管平台&#xff0c;付费用户可以建私人仓库&#xff0c;我们一般的免费用户只能使用公共…

Android 动画实现 从基础到自定义

1. 基础使用 由于是继承了ValueAnimator类 所以使用的方法十分类似&#xff1a;XML 设置 / Java设置1.1 Java设置 ObjectAnimator animator ObjectAnimator.ofFloat(Object object, String property, float ....values); // Object object&#xff1a;需要操作的对象 // Str…

【SpringCloud负载均衡】【源码+图解】【二】LoadBalancer配置

【SpringCloud负载均衡】【源码图解】【一】LoadBalancer的HelloWorld体验 目录2. LoadBalancer的配置2.1 config.LoadBalancerAutoConfiguration2.2 BlockingLoadBalancerClientAutoConfiguration2.3 LoadBalancerEurekaAutoConfiguration2.4 loadbalancer.LoadBalancerAutoCo…

[附源码]Python计算机毕业设计SSM建筑材料采购管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

引擎入门 | Unity UI简介–第2部分(5)

本期我们继续为大家进行Unity UI简介&#xff08;第二部分&#xff09;的后续教程 本篇内容 9.设置动画对话框 文章末尾可免费获取教程源代码 本篇本篇Unity UI简介&#xff08;第二部分&#xff09;篇幅较长&#xff0c;分为八篇&#xff0c;本篇为第五篇。 9.设置动画对…

css:css属性pointer-events实现点击穿透

文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/pointer-events pointer-events CSS 属性指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target 常用属性 /* Keyword values */ pointer-events: auto; /* 与pointer-events属性未指定时的表现效…

jsp+servlet+mysql实现的学生签到考勤请假管理系统源码+教程

今天给大家演示一下由jsp servlet mysql实现的一款学生签到管理系统&#xff0c;系统主要分管理员、学生、辅导员、教师等角色登录&#xff0c;实现学生发起请假、教师辅导员审批等动作&#xff0c;该项目不仅源码完整&#xff0c;还带有完整的论文文档&#xff0c;数据库设计说…

Linux下普通用户(非root用户)安装Java,Java程序能编译不能运行的原因

Linux下普通用户&#xff08;非root用户&#xff09;安装Java1. 下载2. 解压缩3. 修改环境变量4. 验证5. 第一个Java程序1. 下载 根据自己的系统&#xff0c;从官网上直接下载即可。本文以jdk-8u202-linux-x64.tar.gz为例。 2. 解压缩 使用以下命令解压 tar -zxvf jdk-8u2…

【Python自然语言处理+tkinter图形化界面】实现智能医疗客服问答机器人实战(附源码、数据集、演示 超详细)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、问答智能客服简介 QA问答是Question-and-Answer的缩写&#xff0c;根据用户提出的问题检索答案&#xff0c;并用用户可以理解的自然语言回答用户&#xff0c;问答型客服注重一问一答处理&#xff0c;侧重知识的推理。 …

Yolov5 中添加Network Slimming剪枝--稀疏训练部分

前言&#xff1a;Network Slimming剪枝过程让如下 1. 稀疏化 2. 剪枝 3. 反复迭代这个过程 一、稀疏化&#xff1a; 通过Network Slimming 的核心思想是:添加L1正则来约束BN层系数&#xff0c;从而剪掉那些贡献比较小的通道channel 原理如下&#xff1a;BN层的计算是这样的…

如何理解UML2.5.1(02篇)

为了避免使大家产生畏难情绪&#xff0c;本节先讲一个相对简单又相对普遍的问题。先看UML2.5.1中第13.2.3.5的如下内容&#xff1a; A Behavior shall be the method for no more than one BehavioralFeature, called its specification. 翻译过来就是&#xff1a; 一个行为应该…

[附源码]Python计算机毕业设计SSM家政服务系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2093197-94-3,DBCO-BODIPY FL,二苯并环辛炔-BODIPY FL点击化学染料环辛炔

【中文名称】氟化硼二吡咯二苯并环辛炔&#xff0c;二苯并环辛炔-BODIPY FL 【英文名称】 DBCO-BODIPY FL&#xff0c;BDP FL DBCO 【结 构 式】 【CAS号】2093197-94-3 【分子式】C32H29BF2N4O2 【分子量】550.42 【基团部分】DBCO部分 【纯度标准】95% 【包装规格】5g&#x…