数据结构--堆排序

news2024/11/25 19:19:16

目录

堆的定义 

建立初始化堆的步骤

建立大根堆的代码

大根堆排序的代码 

算法效率分析 

稳定性


堆的定义 

回忆

基于选择排序的特性:选取关键字最小(或者最大)的元素放入到序列里面,知道了大堆和小堆概念,所以将数组转换为二叉树用大小堆,进行选择排序比较方便

建立初始化堆的步骤

下面讲解给了初始序列(数组形式)如何转换为大根堆的样子来进行选择排序

非终端结点就是i<=n/2,即8/2=4,数组下标是01234的,后面的5678下标都是叶子结点不用管

调整后的样子如下

建立大根堆的代码

得到

 

09小元素下坠如下: (每次把最大的元素往上面放)09的左右子树当中右子树78最大,78上移

09还是小于左右子树,此时左子树65大于53,所以把65上移,09下坠到65的位置 得到如下:

完成了第一趟的处理,效果是把最大元素放到末尾,上面树成为大根堆的形式

第二趟

78和53交换

交换得到如下 78和87已经放到最后就暂时不用考虑了

53进行下坠,和65换位置得到如下: (78放到最后了不需要和53比较)

剩余元素成为了大根堆,如下所圈出来部分

第三趟

 得到

下坠:

 

得到如下,所圈出来部分又是大根堆

依次类推,得到结果

大根堆排序的代码 

算法效率分析 

只需要记住建堆的过程,关键字对比次数不超过4n,建堆的时间复杂度=O(n)

 

稳定性

堆排序不稳定

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

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

相关文章

解决电脑桌面软件图标变白的问题

文章目录 前言一、软件图标变白的原因二、解决方法1、显示隐藏项目2、清除图标缓存 前言 桌面软件太多了&#xff0c;导致有些杂乱&#xff0c;换了个显示器后&#xff0c;想着将桌面的软件分类&#xff0c;将其放到不同的目录下&#xff0c;结果有些软件放入文件夹后图标变成…

【【萌新的FPGA学习之触摸屏控制LED实验】】

萌新的FPGA学习之触摸屏控制LED实验 触摸屏控制LED实验 触摸按键主要可分为四大类&#xff1a;电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同&#xff0c;每 种触摸按键都有其合适的使用领域。 电阻式触摸按键由多块导电薄膜按照按键的位置印制而成&#xff0c…

链表(单链表、双链表)

前言&#xff1a;链表是算法中比较难理解的部分&#xff0c;本博客记录单链表、双链表学习&#xff0c;理解节点和指针的使用&#xff0c;主要内容包括&#xff1a;使用python创建链表、实现链表常见的操作。 目录 单链表 双链表 单链表 引入链表的背景&#xff1a; 先来看…

Goby 漏洞发布|泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞

漏洞名称&#xff1a;泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞 English Name&#xff1a; Weaver E-office flow_xml.php file SORT_ID parameter SQL injection vulnerability CVSS core:7.8 影响资产数&#xff1a; 21632 漏洞描述&#xff1a; 泛微…

idea创建同级项目-纠结是SB

idea创建同级项目-纠结是SB 创建方法&#xff1a;

线性约束最小方差准则(LCMV)波束形成算法仿真

常规波束形成仅能使得主波束对准目标方向&#xff0c;从而在噪声环境下检测到目标&#xff0c;但无法对复杂多变的干扰做出响应&#xff0c;所以不能称之为真正意义上的自适应滤波。自适应阵列处理指的是采用自适应算法对空间阵列接收的混合信号进行处理&#xff0c;又可称为自…

【Element-UI】实现动态树、数据表格及分页效果

一、导言 1、引言 在现代软件开发中&#xff0c;动态树、数据表格以及分页效果成为了许多应用的核心需求。随着业务规模和复杂性的增加&#xff0c;我们往往需要展示大量的层级结构数据&#xff0c;并且实现交互性强且高效的操作。 动态树提供了一种组织结构清晰、可伸缩的展示…

提取PDF数据:Documents for PDF ( GcPdf )

在当今数据驱动的世界中&#xff0c;从 PDF 文档中无缝提取结构化表格数据已成为开发人员的一项关键任务。借助GrapeCity Documents for PDF ( GcPdf )&#xff0c;您可以使用 C# 以编程方式轻松解锁这些 PDF 中隐藏的信息宝藏。 考虑一下 PDF&#xff08;最常用的文档格式之一…

4代码工程结构

产品代码都给你看了&#xff0c;可别再说不会DDD&#xff08;四&#xff09;&#xff1a;代码工程结构 # 这是一个讲解DDD落地的文章系列&#xff0c;作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云&#xff08;https://www.…

接口自动化测试框架【reudom】

reudom Automated testing framework based on requests and unittest interface. 基于 Unittest 和 Requests 的 接口自动化测试框架 介绍 基于Unittest/Requests的接口自动化测试库 提供脚手架&#xff0c;快速生成接口自动化测试项目。自动生成HTML测试报告。支持用例参数…

「网页开发|前端开发|Vue」09 Vue状态管理Vuex:让页面根据用户登录状态渲染不同内容

本文主要介绍如何通过Vue的状态管理框架Vuex来管理一些被不同组件或不同页面共同使用的数据&#xff0c;然后展示如何通过状态管理用户信息&#xff0c;并且在具体页面获取用户信息&#xff0c;并且根据用户信息的不同展示不同的页面内容。 文章目录 本系列前文传送门一、场景…

手把手教你,细说向开源项目递交代码的流程

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 常用GIT命令详解&#xff0c;手把手让你登堂入室 GIT实战篇&#xff0c;教你如何使用GIT可视化工具 GIT使用需知&#xff0c;哪些操作…

面试必杀技:Jmeter性能测试攻略大全(第三弹)(脚本开发)

今天是最后一章哦&#xff0c;主要是讲jmeter性能测试脚本相关的。原创不易&#xff0c;点个赞意思一下呗&#xff01; 一. 脚本开发方式大纲 1、badboy进行录制和导出 badboy下载地址: 链接&#xff1a;https://pan.baidu.com/s/18Po3RssrBRSnn_-xsHop1g 提取码&#xff1…

协程切换的三种底层实现方式

1.setjmp/longjmp setjmp 和 longjmp 是C语言中用于实现基本的协程的底层函数。它们允许在一个函数的执行过程中保存当前的执行状态&#xff08;包括寄存器和栈信息&#xff09;&#xff0c;然后在之后的某个时间点恢复到这个状态&#xff0c;从而实现函数的非局部跳转。 这两…

OpenGl材质

在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。有些物体反射光的时候不会有太多的散射(Scatter)&#xff0c;因而产生较小的高光点&#x…

【数据结构-树】哈夫曼树

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

transformer系列3---transformer结构参数量统计

Transformer参数量统计 1 Embedding2 Positional Encoding3 Transformer Encoder3.1 单层EncoderLayer3.1.1 MHA3.1.2 layer normalization3.1.3 MLP3.1.4 layer normalization 3.2 N层Encoderlayer总参数量 4 Transformer Decoder4.1 单层Decoderlayer4.1.1 mask MHA4.1.2 lay…

AUTOSAR中的Crypto Stack(二)--CSM数据类型解析

在上一节,简单梳理了加密栈的基本要求。其中最关键最核心的还是用户如何使用HSM这个黑盒子,这就必须要对Crypto Service Manager要有很清晰的认识。 那么首先我们还是围绕概述里提到的job类型进行分析。 1. Crypto_JobType 上图, 在AUTOSAR的架构里,所有的密码操作…

笔记本电脑查询连接wifi密码

笔记本电脑查询连接wifi密码 1、背景2、环境3、实操3.1、已连接wifi查看密码3.2、之前连接过的wifi密码查看 1、背景 在日常使用过程中遇到两个使用场景。网络管理员跳过一下步骤&#xff0c;针对wifi使用人员。 1、刚到一个新环境中需要连接wifi的场景 2、在一个场所连接过一…

【LeetCode热题100】--160.相交链表

160.相交链表 使用双指针&#xff1a; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode getInter…