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

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn

  • Hadoop
  • HDFS
    • HDFS架构
    • 写文件流程
    • 读文件流程
  • MapReduce
    • MapReduce简介
    • MapReduce整体流程
  • Yarn

Hadoop

Hadoop是Apache开源的分布式大数据存储与计算框架,由HDFS、MapReduce、Yarn三部分组成。广义上的Hadoop其实是指Hadoop生态圈,包括的组件就不只是HDFS、MapReduce、Yarn,还包括Spark、Flink、Zookeeper、Sqoop、Hive、HBase等工具,但是我们讨论的不是Hadoop生态圈。

在这里插入图片描述

由于要解决大数据量的存储和计算问题,因此数据不能再存储在关系型数据库,而是存储在分布式文件系统HDFS中;然后通过分布式离线计算框架MapReduce进行计算;而Yarn则是负责资源调度,也就是决定计算任务调度到哪些节点上执行。

在这里插入图片描述

HDFS

HDFS是一个分布式文件系统,用于存储海量的文件数据。其优点是可以存储达PB级别的文件数据,百万级别以上的文件数量;而缺点则是不适合低延时数据访问,并且不支持文件修改,只支持追加。

HDFS架构

在这里插入图片描述

HDFS一共由四部分组成:Client、NameNode、DataNode、SecondaryNameNode。

  • Client:负责文件上传之前的文件切分,切分好后传输每一个文件数据块到DataNode,上传数据块前询问NameNode该数据块上传的目标DataNode;从HDFS读取文件前询问NameNode返回文件元数据信息,再根据元数据从DataNode读取每个数据块。
  • NameNode:接受DataNode的注册,存储文件的元数据信息,配置副本策略等。
  • DataNode:存储文件数据块。
  • SecondaryNameNode:给NameNode进行FsImage(磁盘中的元数据)和Edits(内存中的元数据,还未写入FsImage,在Edits中进行追加写记录日志)的合并。

写文件流程

文件写入流程如下:

在这里插入图片描述

客户端在上传文件时会进行文件切割,把文件切割成一个一个的数据块block,然后分别上传每个数据块;上传每个数据块时,询问NameNode得知该数据块传输到哪些DataNode上;然后根据NameNode返回结果,上传数据块到DataNode。

读文件流程

文件读取流程如下:

在这里插入图片描述

NameNode记录了文件元数据信息,比如哪个block存储在哪些DataNode。Client读取文件时,请求NameNode获取元数据信息,就可以根据元数据信息请求对应的DataNode读取对应的每个block。

MapReduce

MapReduce简介

MapReduce是一个分布式离线计算框架,专门用于处理大数据场景中与实时性无关的一些离线计算任务。

在这里插入图片描述

MapReduce的数据输入一般是HDFS,然后经过InputFormat进行输入格式化,变成<K,V>格式;然后执行用户实现的Mapper类型的map方法,进行数据映射,映射处理的结果也是<K,V>格式;然后执行一个shuffle过程,对映射结果进行按key进行分组分区,把同一区域的所有KV发送到同一个Reducer,由一个节点进行;Reducer对同一个key分组下的所有value进行聚合操作;然后Reducer的输出结果再经过OutputFormat进行格式化处理后进行结果输出。

MapReduce整体流程

下面是MapReduce运行的整体流程:

在这里插入图片描述

  1. client从HDFS读取指定文件的元数据,然后根据文件大小和block大小计算切片信息,得出切片规划文件,然后提交job到Yarn指定的路径,job中包括切片规划文件和jar包等,这个jar包包含了用户编写的Mapper和Reducer。
  2. Yarn根据切片数量计算MapTask的数据量,一般一个block对应一个MapTask,然后把对应的task和程序启动脚本分派给block所在的节点上运行。
  3. 每个节点执行对应的MapTask,默认的InputFormat读取每一行数据,然后以该行数据在文件中的起始字节偏移量为key,行数据本身作为value,调用Mapper的map方法。
  4. Mapper的map方法进行数据映射处理,那是用户自己实现的逻辑。
  5. 对计算结果进行Shuffle处理,根据key进行分组排序,然后对所有的key进行分区处理,同一分区的所有key会指派给一个ReduceTask执行,每个ReduceTask又会分派给一个节点执行。
  6. 执行ReduceTask的节点下载分区数据,然后对不同MapTask得出的同一partition进行合并并排序。
  7. 调用Reducer的reduce方法进行相应的聚合计算,这里也是由用户自己实现。
  8. OutputFormation把Reducer产生的结果做格式化处理,默认会写为行数据。
  9. 最后把结果存入HDFS中。

Yarn

Yarn是负责资源调度的,由Yarn管理每个Node节点然后进行任务分派,也就是把MapTask和ReduceTask分配给对应的Node。

在这里插入图片描述

yarn有ResourceManager和NodeManager两角色。ResourceManager负责监控NodeManager,接收客户端提交的job,然后进行资源分配调度;NodeManager负责管理单个节点上的资源,并执行ResourceManager的命令,启动并运行相应的MapTask和ReduceTask。

在这里插入图片描述

然而真正进行任务分配的并不是ResourceManager,ResourceManager每接收一个job,会选一个NodeManager来启动一个ApplicationMaster,由ApplicationMaster向ResourceManager申请资源并发送任务和启动脚本到对应的NodeManager。

而task都是在Container中运行,Container是节点资源的抽象(比如cpu、内存等),也就是限制了该task只能使用这么多资源,避免一个task占满整个node的所有资源。

相关文章:

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn HadoopHDFSHDFS架构写文件流程读文件流程 MapReduceMapReduce简介MapReduce整体流程 Yarn Hadoop Hadoop是Apache开源的分布式大数据存储与计算框架&#xff0c;由HDFS、MapReduce、Yarn三部分组成。广义上的Hadoop其实是指H…...

AGPT•intelligence:带你领略全新量化交易的风采

随着金融科技的快速发展&#xff0c;量化交易已经成为了投资领域的热门话题。越来越多的投资者开始关注和使用量化交易软件来进行投资决策。在市场上有许多量化交易软件可供选择。 Delaek&#xff0c;是一位资深的金融科技专家&#xff0c;在 2020年成立一家专注于数字资产量化…...

HarmonyOS Next开发学习手册——创建轮播 (Swiper)

Swiper 组件提供滑动轮播显示的能力。Swiper本身是一个容器组件&#xff0c;当设置了多个子组件后&#xff0c;可以对这些子组件进行轮播显示。通常&#xff0c;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 针对复杂页面场景&#xff0c;可以使用 Sw…...

【计算机视觉】mmcv库详细介绍

文章目录 MMVC库概览特点和优势主要组件应用案例示例一:数据加载和处理示例二:模型训练和验证MMVC库概览 MMCV 是一个用于计算机视觉研究的开源库,它为各种视觉任务提供了底层的、高度优化的 API。该库涵盖了从数据加载到模型训练的各个方面,广泛应用于开源项目,如 MMDet…...

【面试系列】Go 语言高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…...

React 扩展

文章目录 PureComponent1. 使用 React.Component&#xff0c;不会进行浅比较2. 使用 shouldComponentUpdate 生命周期钩子&#xff0c;手动比较3. 使用 React.PureComponent&#xff0c;自动进行浅比较 Render Props1. 使用 Children props&#xff08;通过组件标签体传入结构&…...

IT入门知识第八部分《云计算》(8/10)

目录 云计算&#xff1a;现代技术的新篇章 1. 云计算基础 1.1 云计算的起源和发展 云计算的早期概念 云计算的发展历程 1.2 云计算的核心特点 按需自助服务 广泛的网络访问 资源池化 快速弹性 按使用量付费 1.3 云计算的优势和挑战 成本效益 灵活性和可扩展性 维…...

Linux-笔记 全志T113移植正点4.3寸RGB屏幕笔记

目录 前言 线序整理 软件 显示调试 触摸调试 背光调试 前言 由于手头有一块4.3寸的RGB屏幕(触摸IC为GT1151)&#xff0c;正好开发板上也有40Pin的RGB接口&#xff0c;就想着给移植一下&#xff0c;前期准备工作主要是整理好线序&#xff0c;然后用转接板与杜邦线连接验证好…...

Linux shell编程学习笔记59: ps 获取系统进程信息,类似于Windows系统中的tasklist 命令

0 前言 系统进程信息是电脑网络信息安全检查中的一块重要内容&#xff0c;对于使用Linux和基于Linux作为操作系统的电脑来说&#xff0c;可以使用ps命令。 1 ps命令 的功能、格式和选项说明 1.1 ps命令 的功能 Linux 中的ps&#xff08;意为&#xff1a;process status&…...

在Android中使用ProgressBar显示进度

在Android中使用ProgressBar显示进度 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Android应用中使用ProgressBar来显示进度。ProgressB…...

Java基础面试题(简单版):

1.java的8个基本数据类型? 整型: byte(占用1个字节) short(占用2个字节) int(占用4个字节) long(占用8个字节) 浮点型: float(占用4个字节)、double(占用8个字节) 字符型: char 布尔型: boolean 2.ArrayList和LinkedList的区别? 可以说ArrayList和LinkedList除了是同属于集合…...

​Chrome插件:Postman Interceptor 调试的终极利器

今天给大家介绍一款非常实用的工具——Postman Interceptor。 这个工具可以捕捉任何网站的请求&#xff0c;并将其发送到Postman客户端。 对于经常和API打交道的程序员来说&#xff0c;Postman Interceptor真的是神器级别的存在。 下面就让我详细说说这个插件怎么用&#xf…...

SpringBoot学习04-[定制SpringMVC]

定制SpringMVC 定制SpringMvc的自动配置定制springmvc-configurePathMatch配置定制SpringMVC-拦截器Interceptor定制SpringMVC-CORS配置全局cors配置针对某个方法加跨域解决 WebMvcConfigurer原理定制SpringMVC-JSONJSON开发jackson的使用定制化json序列化和反序列化 JSON国际化…...

QT拖放事件之六:自定义MIME类型的存储及读取demo

1、MIME类型描述 MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。 浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL…...

架构师必知的绝活-JVM调优

前言 为什么要学JVM&#xff1f; 首先&#xff1a;面试需要 了解JVM能帮助回答面试中的复杂问题。面试中涉及到的JVM相关问题层出不穷&#xff0c;难道每次面试都靠背几百上千条面试八股&#xff1f; 其次&#xff1a;基础知识决定上层建筑 自己写的代码都不知道是怎么回事&a…...

小米平板6系列对比

小米平板6系列目前有4款&#xff0c;分别为6、6 Pro、6 Max、6S Pro。具体对比如下表所示。 小米平板型号66 Pro6 Max6S Pro实物图发布时间2023年4月21日2023年4月21日2023年8月14日2024年2月22 日屏幕大小11英寸11英寸14英寸12.4英寸分辨率2.8K2.8K2.8K3K刷新率144Hz144Hz120…...

用 Rust 实现一个替代 WebSocket 的协议

很久之前我就对websocket颇有微词&#xff0c;它的确满足了很多情境下的需求&#xff0c;但是仍然有不少问题。对我来说&#xff0c;最大的一个问题是websocket的数据是明文传输的&#xff0c;这使得websocket的数据很容易遭到劫持和攻击。同时&#xff0c;WebSocket继承自HTTP…...

【docker】2. 编排容器技术发展史(了解)

该篇文章介绍的主要是编排以及容器技术的发展史(了解即可)&#xff0c;如果想单纯学习docker命令操作可直接略过&#xff01;&#xff01;&#xff01; 容器技术发展史 Jail 时代 容器不是一个新概念或者新技术&#xff0c;很早就有了&#xff0c;只是近几年遇到了云计算&am…...

吉利银河L6(官方小订送的3M) 对比 威固vk70+ks15

吉利送的号称价值2000的3M效果 撕膜重贴 威固vk70ks15 之后的效果 // 忘记测反射的热量了 可以验证金属膜是反射热而不是吸热 金属膜 手机GPS还能用吗 亲测 能用 太阳能总阻隔率 3M貌似20%出头 威固前档55% 侧后挡高一点不超过60% 夏天真实太阳发热能量 即阻隔率55%到60% …...

three.js实现雪花场景效果

点击获取雪花图片素材 提取码:lywa // 雪花效果 import * as THREE from "three" export function getsnowEffect(th) {console.log(th, th) // this 场景var that th// 创建一个BufferGeometry对象&#xff0c;用于存储顶点数据 const geometry new THREE.Buffe…...

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…...

Elasticsearch优化索引映射和设置

在Elasticsearch的世界中&#xff0c;优化索引的映射&#xff08;mapping&#xff09;和设置&#xff08;settings&#xff09;对于提高搜索性能、存储效率和系统稳定性至关重要。本文将带您深入了解如何针对Elasticsearch的索引进行优化&#xff0c;帮助您构建更高效、更可靠的…...

boss直聘招聘数据可视化分析

boss直聘招聘数据可视化分析 一、数据预处理二、数据可视化三、完整代码一、数据预处理 在 上一篇博客中,笔者已经详细介绍了使用selenium爬取南昌市web前端工程师的招聘岗位数据,数据格式如下: 这里主要对薪水列进行处理,为方便处理,将日薪和周薪的数据删除,将带有13薪…...

小程序人脸分析

公司的业务需求是用户在使用某个功能前&#xff0c;必须使用人脸识别&#xff0c;确保当前使用人是用户本人&#xff0c;防止某些功能乱用。后端用的是腾讯的人脸识别方案&#xff0c;这里只是前端的识别代码&#xff0c;保证人脸剧中&#xff0c;大小合适&#xff0c;有一个人…...

UML建模笔记

5个视图 设计。类&#xff0c;接口&#xff0c;对象如何协作。实现。组件&#xff0c;运行程序&#xff0c;文档关系。用例。用户功能期望。进程。并发与同步相关进程&#xff0c;线程。部署。部署到计算机。 建模目的 和客户共创追踪需求变更协同开发进度控制持续迭代测试生…...

初见SpringCloud ing

Consul 服务注册与发现 服务注册与发现 服务注册&#xff1a;微服务在启动时&#xff0c;会将自己的信息&#xff08;如 IP 地址、端口、服务名称等&#xff09;注册到 Consul。 服务发现&#xff1a;其他微服务可以通过 Consul 查询到已注册的服务&#xff0c;并通过这些信息…...

Python | Leetcode Python题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; class Solution:def rob(self, nums: List[int]) -> int:if not nums:return 0size len(nums)if size 1:return nums[0]first, second nums[0], max(nums[0], nums[1])for i in range(2, size):first, second second, max(first nu…...

什么是中断?---STM32篇

目录 一&#xff0c;中断的概念 二&#xff0c;中断的意义 三&#xff0c;中断的优先级 四&#xff0c;中断的嵌套 如果一个高优先级的中断发生&#xff0c;它会立即打断当前正在处理的中断&#xff08;如果其优先级较低&#xff09;&#xff0c;并首先处理这个高优…...

51单片机第1步_putchar()和_getkey()应用

没有开发板&#xff0c;没有烧录器&#xff0c;没有学习场所&#xff0c;如何学习写51单片机的程序&#xff1f;除了采用软件模拟仿真&#xff0c;没有更好的方法&#xff0c;因此&#xff0c;使用串口是学习的第一步。 1、_getkey ()函数 在C:\Keil\C51\LIB中有一个叫GETKEY…...

微信小程序中的地图的使用

微信小程序中的地图组件 是一个用于展示地图的组件&#xff0c;提供了丰富的功能和配置选项&#xff0c;可以实现定位、标记、路线规划等多种地图相关的交互。下面是对这个组件的详细介绍&#xff0c;包括属性、事件以及示例代码。 组件属性 基础属性 longitude: 地图中心的经…...

MySQL root密码丢失处理

没有记住MySQL数据库root用户默认密码(为初始化安装mysql时默认生成) 1)修改/etc/my.cnf文件,在[mysqld]的段中加上一句:skip-grant-tables 重启mysql服务 [root@localhost ~]# service mysqld restart 2)以无密码方式进入mysql: [root@localhost ~]# /usr/local/my…...

RabbitMQ中java实现队列和交换机的声明

java实现队列和交换机的声明 在之前我们都是基于RabbitMQ控制台来创建队列、交换机。但是在实际开发时&#xff0c;队列和交换机是程序员定义的&#xff0c;将来项目上线&#xff0c;又要交给运维去创建。那么程序员就需要把程序中运行的所有队列和交换机都写下来&#xff0c;…...

解决SPA(单页应用)首屏加载速度慢

SPA是目前流行的前端开发模式&#xff0c;相对于传统的多页面用户体验更好&#xff0c;操作更顺畅&#xff0c;开发效率也更高。但是SPA首屏加载速度慢一直是个致命的问题&#xff0c;由于SPA应用首次打开需要一次性加载大量的静态资源&#xff0c;这就导致了加载速度慢的问题&…...

ElementUI框架搭建及组件使用

前言: 当开始使用ElementUI框架来搭建网站或Web应用程序时&#xff0c;了解框架的基本结构和组件的使用是至关重要的。ElementUI是一个基于Vue.js的框架&#xff0c;提供了丰富的UI组件和工具&#xff0c;可以帮助开发人员快速构建现代化的用户界面。 在本文中&#xff0c;我…...

同三维T908转换器 SDI转DVI/HDMI/VGA/色差分量/AV转换器

同三维T908转换器 SDI转DVI/HDMI/VGA/色差分量/AV转换器 1路SDI进&#xff0c;1路DVI(可转HDMI/VGA/色差分量/AV)3.5音频1路SDI出,可以支持音频解嵌&#xff0c;也可把3.5音频加嵌转换输出&#xff0c;输出分辨率可调&#xff0c;支持图像翻转180度 一、产品简介 SDI转万能转…...

【设计模式】【创建型5-5】【原型模式】

文章目录 原型模式代码示例 原型模式 代码使用&#xff1a;spring框架里 bean的作用域 用途&#xff0c;以原型为模板&#xff0c;源源不断的创建&#xff08;克隆 clone&#xff09;对象。当直接创建对象的代价比较大时&#xff0c;则采用这种模式。 代码示例 public class…...

原子变量原理剖析

一、原子操作 原子操作保证指令以原子的方式执行&#xff0c;执行过程不被打断。先看一个实例&#xff0c;如下所示&#xff0c;如果thread_func_a和thread_func_b同时运行&#xff0c;执行完成后&#xff0c;i的值是多少&#xff1f; // test.c static int i 0;void thread…...

WebSocket走私实践(附赠LiveGBS监控系统未授权管理员密码重置)

WebSocket走私实践&#xff08;附赠LiveGBS监控系统未授权管理员密码重置&#xff09; 对此&#xff0c;我特别感谢TryHackMe和HackTheBox academy&#xff0c;永远相信和追随英国TryHackMe所教导的网络安全知识,并保持学习 WebSocket走私相关的知识在这里 前段时间学习过htt…...

CentOS 7 和 CentOS Stream 8 的主要区别

更新频率&#xff1a; CentOS 7&#xff1a;传统的稳定版本&#xff0c;主要用于生产环境&#xff0c;更新频率较低&#xff0c;主要包含安全补丁和重要修复。CentOS Stream 8&#xff1a;滚动发布版本&#xff0c;更新更频繁&#xff0c;包含最新的特性和改进。它处于 Fedora …...

基于go1.19的站点模板爬虫

一、go1.19 go1.19是Go语言的一个版本,于2021年8月发布。它带来了许多新的功能和改进,包括但不限于以下方面: 并发性能改进:go1.19引入了新的调度器算法,称为“网状调度器(netlink scheduler)”,它可以更好地处理大量并发任务,在某些情况下提高了系统的并发能力。 垃…...

(单机版)神魔大陆|v0.51.0|冰火荣耀

前言 今天给大家带来一款单机游戏的架设&#xff1a;神魔大陆v0.51.0:冰火荣耀。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; (单机版)神魔大陆 下面我将详细的教程交给大家&#xff0c;请耐心阅…...

k8s自动补全工具和UI管理界面

分享两个有利于K8S的工具 目录 分享两个有利于K8S的工具 一、部署Dashboard&#xff08;主节点&#xff09; 介绍 1.1、查看集群状态 1.2、下载yaml文件并运行Dashboard 1.3、部署服务 1.4、创建访问账户、获取token&#xff08;令牌&#xff09; 1.5、浏览器访问Dash…...

内网渗透:内网基础信息收集

Windows&#xff1a; whoami:查看当前当前主机名和登录用户名 whoami /user : 打印当前主机名和输出SID ​ SID的最后一个数字&#xff1a; 1000&#xff1a;普通管理员 500&#xff1a;administrator 501&#xff1a;Guest 516&#xff1a;域控 544&#xff1a;域管理员 net…...

cos符号链提示是什么?TOT呢?

**关于cos符号链提示&#xff08;Chain-of-Symbol Prompting, CoS&#xff09;**&#xff1a; Chain-of-Symbol Prompting&#xff08;CoS&#xff09;是用于大型语言模型&#xff08;LLMs&#xff09;的一种新的提示方法。它旨在解决LLMs在空间场景中的理解和规划问题&#xf…...

docker-compose部署Flink及Dinky

docker-compose部署Flink及Dinky 服务器环境&#xff1a;centos7 1. 配置hosts vim /etc/hostsx.x.x.x jobmanager x.x.x.x taskmanager x.x.x.x dinky-mysql2. 文件目录结构 . ├── conf │ ├── JobManager │ │ ├── flink-conf.yaml │ │ ├── log…...

数字时代的文化革命:Facebook的社会影响

随着数字技术的飞速发展和互联网的普及&#xff0c;社交网络如今已成为人们日常生活中不可或缺的一部分。在众多社交平台中&#xff0c;Facebook作为最大的社交网络之一&#xff0c;不仅连接了全球数十亿用户&#xff0c;更深刻影响了人们的社会互动方式、文化认同和信息传播模…...

66.前端接口调用返回400的错误

错误代码400通常表示由于无效的请求导致服务器无法处理请求。这可能是由于以下原因之一&#xff1a; 1.语法错误&#xff1a;客户端发送的请求可能存在语法错误&#xff0c;例如缺少必需的参数、格式不正确等。 2.未授权&#xff1a;如果API需要认证&#xff0c;而客户端没有提…...

Hadoop 安装与伪分布的搭建

目录 1 SSH免密登录 1.1 修改主机名称 1.2 修改hosts文件 1.3 创建hadoop用户 1.4 生成密钥对免密登录 2 搭建hadoop环境与jdk环境 2.1 将下载好的压缩包进行解压 2.2 编写hadoop环境变量脚本文件 2.3 修改hadoop配置文件&#xff0c;指定jdk路径 2.4 查看环境是否搭建完成 3 …...

网络安全:渗透测试思路.(面试)

网络安全&#xff1a;渗透测试思路.&#xff08;面试&#xff09; 渗透测试&#xff0c;也称为 "pen testing"&#xff0c;是一种模拟黑客攻击的网络安全实践&#xff0c;目的是评估计算机系统、网络或Web应用程序的安全性. 目录&#xff1a; 网络安全&#xff1a;…...

优化堆排序

优化堆排序 堆排序是一种基于比较的排序算法,它利用堆这种数据结构来进行排序。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。堆排序算法分为两个大的步骤:首先将待排序的序列构造成一个最大堆,此时,整个序…...