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

简述归并排序

归并排序

特点:

  • 高效
  • 稳定
  • 时间复杂度最佳/平均/最差: O(N log N)

    递归算法有专门的公式来计算时间复杂度

  • 空间复杂度 O(N)

    因为开辟了临时的tem_arr数组

一个静态的演示图(from leetcode)

在这里插入图片描述

一个动态的演示图

在这里插入图片描述

合并实现使用merge函数

inline void merge(vector<int>& arr, int l, int r) {vector<int> tem_arr;int m = (l + r) >> 1;//1 2 3 4  2 4 5 8//0 1 2 3  4 5 6 7//l		m   	 r//i		   jint i = l, j = m+1;while (i <= m && j <= r) {if (arr[i] <= arr[j]) tem_arr.push_back(arr[i++]);else tem_arr.push_back(arr[j++]);}while (i <= m) tem_arr.push_back(arr[i++]);while (j <= r) tem_arr.push_back(arr[j++]);int k = l;for (auto n : tem_arr) {arr[k++] = n;}
}

mergeSort 函数

  • 利用merge()方法来进行合并
  • 体现了分而治之的算法思想
  • 需要掌握递归的思维
inline void mergeSort(vector<int>& arr, int l, int r) {if (l == r) return;       //如果边界重合返回int m = (l + r) >> 1;     //定义一个中点mergeSort(arr, l, m);     //将问题分成左边部分mergeSort(arr, m+1, r);   //将问题分成右边部分merge(arr, l, r);         //调用merge()来进行合并
}

完整代码

#include <iostream>
#include <vector>
#define test_merge
using namespace std;
inline void merge(vector<int>& arr, int l, int r);inline void mergeSort(vector<int>& arr, int l, int r) {if (l == r) return;int m = (l + r) >> 1;mergeSort(arr, l, m);mergeSort(arr, m+1, r);merge(arr, l, r);
}inline void merge(vector<int>& arr, int l, int r) {vector<int> tem_arr;int m = (l + r) >> 1;//1 2 3 4  2 4 5 8//0 1 2 3  4 5 6 7//l		m   	 r//i		   jint i = l, j = m+1;while (i <= m && j <= r) {if (arr[i] <= arr[j]) tem_arr.push_back(arr[i++]);else tem_arr.push_back(arr[j++]);}while (i <= m) tem_arr.push_back(arr[i++]);while (j <= r) tem_arr.push_back(arr[j++]);int k = l;for (auto n : tem_arr) {arr[k++] = n;}
}int main() {ios::sync_with_stdio(false);//加速出入输出流
#ifdef test_merge
// 	测试 merge 函数是否起作用vector<int> arr = {7, 3, 2, 6, 0, 1, 5, 4};mergeSort(arr, 0, arr.size() - 1);for (auto i : arr) {cout << i << ' ';}
#endif
}

相关文章:

简述归并排序

归并排序 特点&#xff1a; 高效稳定时间复杂度最佳/平均/最差&#xff1a; O(N log N) 递归算法有专门的公式来计算时间复杂度 空间复杂度 O(N) 因为开辟了临时的tem_arr数组 一个静态的演示图(from leetcode) 一个动态的演示图 合并实现使用merge函数 inline void merge(v…...

HTML实现卷轴动画完整源码附注释

动画效果截图 页面的html结构代码 <!DOCTYPE html> <html> <head lang=...

sh: 1: dtc: not found

报错&#xff1a; bl31.bin size: 41632 u-boot-nodtb.bin size: 815816 ai_robot.dtb size: 30552 ./mkimage_uboot -E -p 0x3000 -f u-boot-ai-robot.its u-boot-ai-robot.itb sh: 1: dtc: not found ./mkimage_uboot: Cant open u-boot-ai-robot.itb.tmp: No such file …...

laravel 表单验证的 exists、unique 去除软删除字段的校验

use Illuminate\Validation\Rule; exists 去除软删除字段的校验 $validator \Validator::make($data, [phone_new > [Rule::exists(users, phone)->whereNull(deleted_at),]], [phone_new.exists > 手机号不存在,]);unique 去除软删除字段的校验 // 新增 email>r…...

【PHP + 代码审计】函数详解2.0

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…...

宠物智能喂食机方案设计

我们都知道&#xff0c;现如今养宠物的人群已经很多了&#xff0c;主要是青年人居多&#xff0c;他们在独自漂泊的在外的工作&#xff0c;免不了情感泛滥&#xff0c;养一些小动物也是在预料之中。但由于工作或者其他各种因数&#xff0c;养宠人不可时时刻刻在家&#xff0c;对…...

测试直播打赏需要考虑哪些测试要点?

1.功能测试&#xff1a; 1、检查打赏功能是否正确 &#xff1a;检查打赏操作是否可以正常进行 2、 赞赏余额是否正确&#xff1a; 检查赞赏者和被赞赏者的余额是否正确 3、赞赏交易记录是否正确&#xff1a; 检查赞赏者和被赞赏者的交易记录是否正确&#xff1b; 4、检查赞…...

Python练习(续)

练习1:用户登录注册案例 import sysidname {test:123456}print(""" 英雄联盟商城登录界面~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~1. 用户登录2. 新用户注册3. 退出系统~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ …...

发布镜像到阿里云仓库

发布上一篇Dockerfile实战-自定义的centos镜像。 1、登录阿里云 2、找到容器镜像服务 3、创建命令空间 4、创建镜像仓库 5、点击进入这个镜像仓库&#xff0c;可以看到所有的信息 6、根据操作指南测试推送发布 6.1登录阿里云 [rootzhoujunru home]# docker login --usernam…...

web蓝桥杯真题:灯的颜色变化

代码及注释&#xff1a; // TODO&#xff1a;完善此函数 显示红色颜色的灯 function red() { //将红色图片元素display显示出来&#xff0c;其他隐藏document.querySelector(#defaultlight).style.display nonedocument.querySelector(#redlight).style.display inline-b…...

通过docker容器安装zabbix6.4.12图文详解(监控服务器docker容器)

目录 一、相关环境及镜像二、zabbix-server服务端部署1.使用docker创建zabbix-server服务端(1). 创建专用于Zabbix组件容器的网络(2). 启动空的MySQL服务器实例(3). 启动Zabbix Java网关实例(4). 启动Zabbix服务器实例并将实例与创建的MySQL服务器实例链接(5). 启动Zabbix Web界…...

算法打卡day21|回溯法篇01|理论知识,Leetcode 77.组合

回溯法理论知识 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归就会有回溯。所以回溯函数也就是递归函数&#xff0c;指的都是一个函数。 回溯法的效率 回溯法并不是什么高效的算法。因为回溯的本质是穷举&#xff0c;…...

C++ 输入输出

输入 1.1 cin >> str; 遇到“空格”、“TAB”、“回车”就停止 string str; cin >> str;1.2 getline(cin, str) 可用于输入一行数据&#xff0c;遇到空格不会停止&#xff0c;读入string字符中 便于读取一行一行的数据 while(getline(cin, str)){if(str "EN…...

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS…...

【gpt实践】50个提升工作效率的GPT指令

收集整理了50个工作不同场景中可能会用到的gpt指令&#xff0c;希望对大家有帮助。 1. 用「532规则」定制月度宣传规划 提示&#xff1a;“对于我的 [产品/服务] 在 [社交媒体平台上 ]定位 [我的目标受众]”&#xff0c;使用 5-3-2 规则制定 1 个月的社交媒体内容计划。” Pro…...

基于Springboot的高校竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校竞赛管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…...

论文阅读——EarthPT

EarthPT: a time series foundation model for Earth Observation 一个Earth Observation (EO)预训练的Transformer。EarthPT是一个7亿参数解码Transformer基础模型&#xff0c;以自回归自监督方式进行训练&#xff0c;并专门针对EO用例进行开发。我们证明了EarthPT是一个有效的…...

软件测评中心:进行科技成果鉴定测试的注意事项和好处简析

软件产品科技成果鉴定是有效评价科技成果质量和水平的方法之一&#xff0c;也是鼓励科技成果通过市场竞争等方式得到有效的评价和认可&#xff0c;可以推动科技成果的进步和转化。 一、进行科技成果鉴定测试时的注意事项&#xff1a;   1、应由具备一定资质和能力的专业机构…...

Android 系统开发工具大全

写给应用开发的 Android Framework 教程——玩转AOSP篇之 Android 系统开发工具推荐 下面推荐的是我常用的工具&#xff0c;如果你有好用的开发工具欢迎在评论区留言讨论交流。 1. SSH 服务与 Tabby Terminal SSH 服务使得我们在其他平台上通过 SSH 客户端程序即可访问到我们…...

C版本的-Unet-rknn推理

1. 前言 之前就想着使用rknn的c版本的api做推理看看&#xff0c;找了一个简单的&#xff0c;那就unet吧&#xff0c;本来想着用rk的demo文件&#xff0c;但是里面是mobilenet&#xff0c;相关的函数没有&#xff0c;卡这也卡了好久&#xff0c;突然发现tengine相关的后处理&…...

Blender + AI 如何结合使用?

Blender 本身原生无内置AI&#xff0c;所有AI能力都靠第三方插件、外部AI平台联动、本地大模型对接实现&#xff0c;覆盖AI建模、AI材质纹理、AI渲染风格化、AI场景脚本控制、AI动画五大核心工作流。下面给你完整工具清单、安装流程、实操步骤、全套工作流与新手入门方案&#…...

WarcraftHelper完整指南:让魔兽争霸III在现代电脑上流畅运行的终极解决方案

WarcraftHelper完整指南&#xff1a;让魔兽争霸III在现代电脑上流畅运行的终极解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作…...

一键体验GPT-SoVITS:Docker部署+语音合成实战教程

一键体验GPT-SoVITS&#xff1a;Docker部署语音合成实战教程 1. 为什么选择GPT-SoVITS进行语音合成 语音合成技术近年来取得了长足进步&#xff0c;但大多数开源项目要么需要大量训练数据&#xff0c;要么音质不够理想。GPT-SoVITS的出现改变了这一局面&#xff0c;它结合了G…...

告别硬编码!Spring Security 6.x 配置类实战:如何优雅管理用户角色与API权限

告别硬编码&#xff01;Spring Security 6.x 配置类实战&#xff1a;如何优雅管理用户角色与API权限 在微服务架构盛行的今天&#xff0c;API权限管理已成为系统安全的核心防线。许多开发者仍在使用Spring Security过时的WebSecurityConfigurerAdapter继承方式&#xff0c;导致…...

为什么宝塔面板误删网站数据库无法通过回收站恢复_需依赖面板先前的定时备份或底层数据快照

不能恢复&#xff0c;除非是通过宝塔数据库页面点击【删除】按钮操作的&#xff1b;其他方式如命令行、phpMyAdmin、API调用或站点删除时勾选删库均不进入回收站&#xff0c;且需满足回收站启用、未超保留期、/www/.Recycle目录权限正常三个前提。不能恢复&#xff0c;除非你删…...

开源逻辑分析器LogicAnalyzer:数字信号调试的终极指南

开源逻辑分析器LogicAnalyzer&#xff1a;数字信号调试的终极指南 【免费下载链接】logicanalyzer 24 channel, 100Msps logic analyzer hardware and software 项目地址: https://gitcode.com/GitHub_Trending/lo/logicanalyzer LogicAnalyzer是一款功能强大的开源逻辑…...

SAP HCM SCHEMA-001 AMT=*与FILLF功能

导读OPERATION:Operation 是 SAP HCM 薪资 / 时间计算的 “最小执行单元”&#xff0c;负责对工资类型、时间类型、内部表进行读写、计算、判断、写入等原子操作。它被封装在 PCR 中&#xff0c;由 Function 调用&#xff0c;最终在 Schema 中按流程执行&#xff0c;共同实现复…...

来自学习的第二天

今天是我学习编程的第二天&#xff0c;希望能够学好&#xff0c;能够学得多&#xff0c;以后当个大佬&#xff0c;我相信我一定可以的...

从‘Push to Trip’红色按钮讲起:手把手教你进行漏电断路器功能测试与日常维护

从‘Push to Trip’红色按钮讲起&#xff1a;手把手教你进行漏电断路器功能测试与日常维护 当你面对配电箱里那个神秘的红色按钮时&#xff0c;是否曾犹豫过该不该按下去&#xff1f;作为家庭用电安全的第一道防线&#xff0c;漏电断路器上的每个设计细节都暗藏玄机。本文将带你…...

艾可瑞妥单抗EPKINLY真实世界经验:缓解率数据与中性粒细胞减少、发热等副作用的预防及处理

艾可瑞妥单抗&#xff08;EPKINLY&#xff09;作为一种创新型的双特异性T细胞衔接剂&#xff0c;在复发或难治性弥漫性大B细胞淋巴瘤&#xff08;DLBCL&#xff09;的治疗中展现出显著的疗效。缓解率数据多项真实世界研究数据支持了EPKINLY在治疗DLBCL中的显著疗效。例如&#…...