[算法]归并排序
参考:《漫画算法-小灰的算法之旅》
目录
参考:《漫画算法-小灰的算法之旅》
1、什么是归并排序
2、归并的具体操作
3、代码
4、时间复杂度和空间复杂度
5、归并排序是稳定排序
1、什么是归并排序
归并排序就像是组织一场元素之间的“比武大会”,这场比武大会 分成两个阶段:
(1)分组
假设集合一共有n个元素,算法将会对集合进行逐层的对半分组。
第1层分成2个大组,每组n/2个元素;
第2层分成4个小组,每组n/4个元素;
第3层分成8个更小的组,每组n/8个元素;
……
一直到每组只有一个元素。
(2)归并
归并排序需要确定每一个元素的排列位置。当每个小组内部比较出先后顺序以后,小组之间会展开进一 步的比较和排序,合并成一个大组;大组之间继续比较和排序,再合并成更大的组.......最终,所有元素合并成了一个有序的集合。如下图所示:

2、归并的具体操作
归并操作一般需要三个步骤,我们以两个长度为4的集合为例:

第1步:创建一个额外的大集合,用于存储归并结果,长度是两个小集合之和。(p1,p2,p是三个辅助指针,用于记录当前操作的位 置。)

第2步:从左到右逐一比较两个小集合中的元素,把较小的元素优 先放入大集合。

第3步:从另一个还有剩余元素的集合中,把剩余元素按顺序复制 到大集合尾部。

3、代码


4、时间复杂度和空间复杂度
归并排序把集合一层一层进行折半分组。如果集合长度是n,那么 折半的层数就是logn,每一层进行归并操作的运算量是n。所以,归并排序的时间复杂度等于每一层的运算量×层级数,即 O(nlogn)。每次归并所创建的额外集合都会随着方法的结束而释放, 因此这部分空间不应该累加计算。由于单次归并操作开辟的最大空间 是n,所以归并排序的空间复杂度是O(n)。
5、归并排序是稳定排序
相关文章:
[算法]归并排序
参考:《漫画算法-小灰的算法之旅》 目录 参考:《漫画算法-小灰的算法之旅》 1、什么是归并排序 2、归并的具体操作 3、代码 4、时间复杂度和空间复杂度 5、归并排序是稳定排序 1、什么是归并排序 归并排序就像是组织一场元素之间的“比武大会”&…...
【UE4 RTS游戏】05-自定义日期和时间
效果步骤打开项目设置,重新设置玩家状态类为“MyGameState”打开“MyGameState”,点击类设置,选中父类为“GameStateBase”接着创建一些变量:(1)“TimeUnit”,浮点型,私有࿰…...
ES的restful风格的HTTP方法详解
ES的restful风格的HTTP方法详解 一、概述 restful是一种设计风格,用于构建Web服务和API。 在restful风格中,HTTP请求方法(如GET、POST、PUT、DELETE)和URL(统一资源定位符)被用来定义服务端资源的…...
第十三章 opengl之模型(导入3D模型)
OpenGL模型导入3D模型优化使用3D模型模型 使用Assimp并创建实际的加载和转换代码。Model类结构如下: class Model {public:/* 函数 */Model(char *path){loadModel(path);}void Draw(Shader shader); private:/* 模型数据 */vector<Mesh> meshes;st…...
html标签表示!
html是什么?HTML全称为超文本标记语言,是一种标记语言。包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文…...
前端优化,webpack打包删除无用文件,并附上批量删除文件脚本!非常好用
前言 大家可能在webpack打包项目过程中,常遇见一些无用的图片,js文件,怎样能够自动检测哪些是无用的文件呢?本文中介绍使用插件useless-files-webpack-plugin查找无用文件,在terminal中删除,附加bat批量删…...
SpringCloud之 LoadBalancer负载均衡
文章目录LoadBalancer 负载均衡一、LoadBalanced 负载均衡🌽①观察负载均衡现象🌽②LoadBalanced 源码剖析二、自定义负载均衡三、OpenFeign 实现负载均衡🍆①添加依赖🍆②启动类添加 EnableFeignClients🍆③创建客户端…...
idm如何下载种子文件和磁力链接 idm如何下载torrent
采用分段式下载技术并支持断点续传的idm下载加速器,几乎可以胜任所有的下载任务。由于该软件强大的下载能力和仅为10MB的小巧体积,idm被来自全球的用户亲切地称为天花板级的下载软件。那么有关idm如何下载种子文件和磁力链接,idm如何下载torr…...
UE4 安卓AR 识别图片
UE4 安卓AR 识别图片 开启一个插件 准备一个只有玩家出生点的场景,这个场景用来做识别图片的 新建一个游戏模式,设置好默认的pawn类: 一个摄像机就行了,代表手机开启AR会话后的那个相机 然后gamemode 事件开始运行࿰…...
数字化服务环境下高校成人教育图书馆服务工作的发展方向
1.利用高校成人教育图书馆的整体化优势进行图书馆网络的优化组织与协调,使数字化信息服务功能在图书馆数字化服务中得以充分实现,促使数字电子信息资源成为图书馆信息服务的有机组成部分。2.高校成人教育应该从宏观上有计划有组织地协调高校成人教育图书…...
以创作之名致敬女性开发者
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 前言 在昨天的2023年3月8日,是咱们女性朋友的节日妇女节,本章将会…...
【ArcGIS学习记录03】--利用DEM数据提取河网溪流--加入大型河流数据及裁剪美化
【ArcGIS学习记录03】–利用DEM数据提取河网溪流–加入大型河流数据及裁剪美化 注:本文仅作为自己的学习记录以备以后复习查阅 一 添加大型河流数据 数据是我自己找的,如果有需要的可以私信我发: 二 裁剪 使用这个相交的工具可以对矢量…...
VOC2012数据集取需要的几个类别
Visual Object Classes Challenge 2012 一、VOC2012二、保留 people ,移除其他类三、画一张图片3.1 新开窗口显示3.2 在jupyter notebook 里面显示一、VOC2012 这项挑战的主要目标是从许多视觉对象中识别对象 现实场景中的对象类(即不是预先分割的对象)。是的 从根本上说,…...
主成分分析(PCA)原理
主成分分析(PCA)原理 在高维数据处理中,为了简化计算量以及储存空间,需要对这些高维数据进行一定程度上的降维,并尽量保证数据的不失真。PCA和ICA是两种常用的降维方法。 PCA:principal component analysi…...
Git:合并一个仓库的某个分支到另一个仓库的某个分支
ps:(同名分支或不同名分支均可) 1.操作: 当前仓库A的一个指定分支1 推给 另一个仓库B的另一个指定分支2 仓库A:repo1 分支1:develop1 仓库B:repo2 分支2:develop2 2.操作命令: 1、git pull # 在当前仓…...
工作记录:bi重构
2023.3.8,我在组内进行工作汇报。内容记录如下: 本次重构的特点 改动大影响后续开发 所以有必要进行工作汇报,让组内同事了解代码的改动与现状。 为什么要重构代码? 正在开发的数据报告模块包含大量 widget 功能,…...
java明文数据加密、脱敏方法总结
前言 在一些安全性要求比较高的项目里,避免不了要对敏感信息进行加解密,比如配置文件中的敏感信息。 第一种方法(自定义加解密) 加解密工具类: public class SecurityTools {public static final String ALGORITHM…...
4N65-ASEMI高压MOS管4N65
编辑-Z 4N65在TO-220封装里的静态漏极源导通电阻(RDS(ON))为2.5Ω,是一款N沟道高压MOS管。4N65的最大脉冲正向电流ISM为16A,零栅极电压漏极电流(IDSS)为10uA,其工作时耐温度范围为-55~150摄氏度。4N65功耗(…...
天梯赛训练L1-018 (大笨钟)
目录 1、L1-018 大笨钟 2、 如果到帮助大家,希望大家一键三连!!! 1、L1-018 大笨钟 分数 10 题目通道 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律&a…...
GCC编译器编译C/C++程序(一步完成、分步完成)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 参考内容 (1)GCC 预处理器选项_dllbl的博客-CSDN博客 (2)Preprocessor Options (Using the GNU Compiler Collection (GCC)) 一、编译的…...
手把手教你用readelf解析DWARF栈信息(含常见错误排查)
深入解析DWARF栈信息:从readelf实战到疑难排查 调试二进制文件时,栈信息的解析往往是定位问题的关键。当程序崩溃或异常时,理解调用栈的状态不仅能帮助我们快速定位问题,还能揭示更深层次的运行机制。本文将带你深入探索如何利用r…...
DbGate数据库管理工具:Docker一键部署与跨平台远程访问实战
1. 为什么选择DbGateDocker组合 第一次接触DbGate是在一个需要同时管理MySQL和MongoDB的项目中。当时团队里有人用Navicat,有人用DBeaver,数据库类型切换时总要重新适应界面。直到发现这个支持多数据库的开源工具,才真正体会到什么叫"一…...
智能突破2048:AI助手如何让数字合成不再依赖运气
智能突破2048:AI助手如何让数字合成不再依赖运气 【免费下载链接】2048-ai AI for the 2048 game 项目地址: https://gitcode.com/gh_mirrors/20/2048-ai 你是否曾在2048游戏中陷入数字迷宫?眼看着屏幕上散落的方块无从下手,移动一步就…...
FreeRTOS在STM32F407上的内存与栈空间优化全攻略:从CubeMX配置到避免堆栈溢出
FreeRTOS在STM32F407上的内存与栈空间优化全攻略:从CubeMX配置到避免堆栈溢出 在嵌入式开发中,资源管理往往是决定项目成败的关键因素。对于使用STM32F407这类资源受限的MCU进行多任务开发的工程师来说,如何合理规划和管理有限的RAM资源&…...
80+经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验
80经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验 【免费下载链接】WidescreenFixesPack Plugins to make or improve widescreen resolutions support in games, add more features and fix bugs. 项目地址: https://gitcode.com/gh_mirrors/wi/WidescreenFi…...
K230目标检测实战:手把手教你用Labelme标注数据并一键转成VOC格式(附避坑指南)
K230目标检测实战:高效数据标注与VOC格式转换全攻略 当你第一次接触K230开发板进行目标检测项目时,数据准备往往是最大的拦路虎。特别是从原始图片到符合AI_Cube要求的VOC格式数据集,这个过程充满了各种"坑"。本文将分享一套经过实…...
4步构建高效视频处理流水线:VideoFusion全功能指南
4步构建高效视频处理流水线:VideoFusion全功能指南 【免费下载链接】VideoFusion 一站式短视频拼接软件 无依赖,点击即用,自动去黑边,自动帧同步,自动调整分辨率,批量变更视频为横屏/竖屏 项目地址: https://gitcode.com/gh_mirrors/vi/VideoFusion 功能特性…...
机器人手臂相机 vs 抓手相机:5个关键区别与选型指南(附避坑技巧)
机器人手臂相机 vs 抓手相机:5个关键区别与选型指南(附避坑技巧) 在工业自动化领域,视觉引导系统如同机器人的"眼睛",而相机安装位置的选择往往决定了整个系统的精度与可靠性。当工程师面对手臂相机…...
基于python视频弹幕情感分析 视频可视化 短视频推荐系统 协同过滤推荐算法
1、项目介绍 技术栈: Python语言、Flask框架、 requests爬虫、协同过滤推荐算法、sqlite数据库、bilibili数据、前台后台 B站数据采集分析、推荐与可视化分析系统是一个强大的工具,它利用Python语言、Flask框架、requests爬虫技术、协同过滤推荐算法以及…...
用Docker三分钟搞定Hive伪分布式环境(附本地开发调试技巧)
用Docker三分钟搞定Hive伪分布式环境(附本地开发调试技巧) 在数据分析和处理领域,Hive作为基于Hadoop的数据仓库工具,因其能够处理海量数据并提供类SQL查询能力而广受欢迎。然而,传统的Hive环境搭建往往需要配置复杂的…...
