归并排序 和 七大算法的总结图
目录
什么是递归排序:
图解:
递归方法:
代码实现:
思路分析:
非递归方法:
思路:
代码实现:
思路分析:
什么是递归排序:
先将数据分解成诺干个序列,将子序列合并排序,得到有序的序列,再与旁边子序列合并;即先使每个子序列有序,再使子序列段间有序。最后将两个有序表合并成⼀个有序表。
图解:

递归方法:
代码实现:
public static void mergeSort(int[] arr) {mergeSortChild(arr,0,arr.length-1);}private static void mergeSortChild(int[] arr,int left,int right) {if(left == right) {return;}int mid = (left + right) / 2;mergeSortChild(arr,left,mid);mergeSortChild(arr,mid + 1,right);//开始合并merge(arr,left,mid,right);}private static void merge(int[] arr, int left, int mid, int right) {//临时数组int[] tmpArr = new int[right - left + 1];int k = 0;int s1 = left;int e1 = mid;int s2 = mid + 1;int e2 = right;while(s1 <= e1 && s2 <= e2) {if(arr[s1] <= arr[s2]) {tmpArr[k++] = arr[s1++];}else {tmpArr[k++] = arr[s2++];}}while(s1 <= e1) {tmpArr[k++] = arr[s1++];}while(s2 <= e2) {tmpArr[k++] = arr[s2++];}//拷贝临时数组给到arrfor (int i = 0; i < k; i++) {arr[i + left] = tmpArr[i];}}
思路分析:

与快速排序类似,结合上图,定义一个 mid 作为 一段数据的中间下标,然后依次往下分,左边的新 left 和 right 为上一个段数据的 left 和 mid ,右边的新 left 和 right 为上一个段数据的 mid + 1 和 right。分解结束条件为 当 left 与 right 相遇了。
对于merge方法,结合此图:

此图是原数据的左边的一段数据,定义一个临时数组,把下面的两个已经有序的 一段数据合并成给到临时数组,方法是s1 与 s2 比较,哪个小先给到临时数组,直到一方为放完。之后,把没放完的一方全部给到临时数组。k就得到临时数组的元素个数。
最后,通过for循环把临时数组的数据拷贝到原始数组里,但是有个要注意的地方:

看蓝色圈出来的区域,3 9 4 2 的那段数据的 3 和 9 一段小数据,如果merge方法 的for循环是这样的:
for (int i = 0; i < k; i++) {arr[i] = tmpArr[i];}
那么将临时数组的数据拷贝到原始数组里,会出现问题。
原始数组的 元素3 下标应该是 4,如果按照从 0 下标开始, 会给到原始数组 0 下标位置这样是不对的,但如果加上了 left:
for (int i = 0; i < k; i++) {arr[i + left] = tmpArr[i];}
这样就能确保 元素3 给到了 原始数组 4 下标的位置。
非递归方法:
思路:

上图对于8个原数据,我们先把数据从 1个1个有序(6和10,1和7,3和9,2和4),一直到 2个2个 有序((6 10和1 7 );(3 9 和 2 4) )来进行排序,那么最后 4个4个 有序((6 10 1 7 )和(3 9 2 4))就能完成排序了。
首先定义了 i 作为遍历数组使用,l 作为 左边起始,r 作为结束位置,m 是 他们的中间位置。
定义一个 gap 作为 临界值,初始化为1,循环结束 gap 每次 乘以 2 ,当 gap 为 数组长度时不进入循环。
上图是 gap 为 2 的时候,其他参数赋值如上图。
代码实现:
public static void feidigui(int[] arr) {int gap = 1;while(gap < arr.length) {for (int i = 0; i < arr.length; i = i + 2*gap) {int left = i;int mid = left + gap - 1;if(mid >= arr.length) {mid = arr.length-1;}int right = mid+gap;if(right >= arr.length) {right = arr.length-1;}merge(arr,left,mid,right);}gap *= 2;}}private static void merge(int[] arr, int left, int mid, int right) {//临时数组int[] tmpArr = new int[right - left + 1];int k = 0;int s1 = left;int e1 = mid;int s2 = mid + 1;int e2 = right;while(s1 <= e1 && s2 <= e2) {if(arr[s1] <= arr[s2]) {tmpArr[k++] = arr[s1++];}else {tmpArr[k++] = arr[s2++];}}while(s1 <= e1) {tmpArr[k++] = arr[s1++];}while(s2 <= e2) {tmpArr[k++] = arr[s2++];}//拷贝临时数组给到arrfor (int i = 0; i < k; i++) {arr[i + left] = tmpArr[i];}}
思路分析:

结合代码和此图,当 gap 为 2 时,i 下一次取值为 i + 2*gap,确保后面的(3 9 2 4)也能进行有序排列。
要注意的是:

过程可能会出现上面三种情况,当 mid 超过了 数组长度 ,就越界了,就要把 mid 设置为数组的最后一个位置,right 同理。此过程不会影响 merge 方法的出现错误。(相当于处理边界值)
归并排序是稳定的。
七大算法的总结图:

相关文章:
归并排序 和 七大算法的总结图
目录 什么是递归排序: 图解: 递归方法: 代码实现: 思路分析: 非递归方法: 思路: 代码实现: 思路分析: 什么是递归排序: 先将数据分解成诺干个序列࿰…...
嵌入式硬件篇---原码、补码、反码
文章目录 前言简介八进制原码、反码、补码1. 原码规则示例问题 2. 反码规则示例问题 3. 补码规则示例优点 4. 补码的运算5. 总结 十六进制原码、反码、补码1. 十六进制的基本概念2. 十六进制的原码规则示例 3. 十六进制的反码规则示例 4. 十六进制的补码规则示例 5. 十六进制补…...
评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法
评估多智能体协作网络(MACNET)的性能 方法选择:选择COT(思维链,Chain of Thought)、AUTOGPT等作为基线方法。 COT是一种通过在推理过程中生成中间推理步骤,来增强语言模型推理能力的方法,能让模型更好地处理复杂问题,比如在数学问题求解中,展示解题步骤。 AUTOGPT则是…...
洛谷题目: P2398 GCD SUM 题解 (本题较难,省选-难度)
题目传送门: P2398 GCD SUM - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言: 本题涉及到 欧拉函数,素数判断,质数,筛法 ,三大知识点,相对来说还是比较难的。 本题要求我们计算 …...
kubernetes-cni 框架源码分析
深入探索 Kubernetes 网络模型和网络通信 Kubernetes 定义了一种简单、一致的网络模型,基于扁平网络结构的设计,无需将主机端口与网络端口进行映射便可以进行高效地通讯,也无需其他组件进行转发。该模型也使应用程序很容易从虚拟机或者主机物…...
AI Agent有哪些痛点问题
AI Agent有哪些痛点问题 目录 AI Agent有哪些痛点问题AI Agent领域有哪些知名的论文缺乏一个将智能多智能体技术和在真实环境中学习的两个适用流程结合起来的统一框架LLM的代理在量化和客观评估方面存在挑战自主代理在动态环境中学习、推理和驾驭不确定性存在挑战AI Agent领域有…...
使用Java爬虫获取京东JD.item_sku API接口数据
在电商领域,商品的SKU(Stock Keeping Unit)信息是运营和管理的关键数据。SKU信息包括商品的规格、价格、库存等,对于商家的库存管理、定价策略和市场分析至关重要。京东作为国内领先的电商平台,提供了丰富的API接口&am…...
华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B
华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载: AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…...
平方数列与立方数列求和的数学推导
先上结论: 平方数列求和公式为: S 2 ( n ) n ( n 1 ) ( 2 n 1 ) 6 S_2(n) \frac{n(n1)(2n1)}{6} S2(n)6n(n1)(2n1) 立方数列求和公式为: S 3 ( n ) ( n ( n 1 ) 2 ) 2 S_3(n) \left( \frac{n(n1)}{2} \right)^2 S3(n)(2n(n1)…...
Java中的synchronized关键字与锁升级机制
在多线程编程中,线程同步是确保程序正确执行的关键。当多个线程同时访问共享资源时,如果不进行同步管理,可能会导致数据不一致的问题。为了避免这些问题,Java 提供了多种同步机制,其中最常见的就是 synchronized 关键字…...
告别传统校准!GNSS模拟器在计量行业的应用
随着GNSS技术的不断进步,各类设备广泛采用该技术实现高精度定位,并推动了其在众多领域的广泛应用。对于关键行业如汽车制造和基础设施,设备的可用性和可靠性被视为基本准则,GNSS作为提供“绝对位置”信息的关键传感器,…...
数据结构结尾
1.二叉树的分类 搜索二叉树,平衡二叉树,红黑树,B树,B树 2.Makefile文件管理 注意: 时间戳:根据时间戳,只编译发生修改后的文件 算法: 算法有如上五个要求。 算法的时间复杂度&am…...
【golang】量化开发学习(一)
均值回归策略简介 均值回归(Mean Reversion)假设价格会围绕均值波动,当价格偏离均值一定程度后,会回归到均值。 基本逻辑: 计算一段时间内的移动均值(如 20 天均线)。当当前价格高于均值一定比…...
AI前端开发:跨领域合作的新引擎
随着人工智能技术的飞速发展,AI代码生成器等工具的出现正深刻地改变着软件开发的模式。 AI前端开发的兴起,不仅提高了开发效率,更重要的是促进了跨领域合作,让数据科学家、UI/UX设计师和前端工程师能够更紧密地协同工作࿰…...
数组练习(深入理解、实践数组)
1.练习1:多个字符从两端移动,向中间汇聚 编写代码,演示多个字符从两端移动,向中间汇聚 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> int main() {//解题思路://根据题意再…...
Bigemap Pro如何进行面裁剪
一般在处理矢量数据,制图过程中,常常会用到面文件的裁剪功能,那么有没有一个工具可以同时实现按照线、顶点、网格以及面来裁剪呢?今天给大家介绍一个宝藏工具,叫做Bigemap Pro,在这里工具里面可以实现上述面…...
acwing算法全总结-数学知识
快速幂 原题链接:快速幂 ac代码: #include<iostream> #include<algorithm> using namespace std; typedef long long LL; LL qmi(int a,int b,int p) {LL res1%p;while(b)//这里本应该分两次进行,不过只有一次询问{if(b&1)…...
SpringMVC学习使用
一、SpringMVC简单理解 1.1 Spring与Web环境集成 1.1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(sp…...
10、《文件上传与下载:MultipartFile与断点续传设计》
文件上传与下载:MultipartFile与断点续传设计 一、基础文件上传与MultipartFile解析 1.1 Spring MVC文件上传基础 PostMapping("/upload") public String handleFileUpload(RequestParam("file") MultipartFile file) {if (!file.isEmpty())…...
DeepSeek 本地部署(电脑安装)
1.先安装Ollama 开源框架 网址链接为:Ollama 2.点中间的下载 3.选系统 4.下载好就安装 5.输入命令ollama -v 6.点击Model 7.选如下 8.选版本 9.复杂对应命令 10.控制台粘贴下载 11.就可以问问题啦 12.配置UI界面(在扩展里面输入) 13.配置完即可打开 14.选择刚才安装的就好啦…...
保姆级教程:用PyTorch复现STANet遥感变化检测模型(附LEVIR-CD数据集下载与配置)
从零实现STANet:基于PyTorch的遥感变化检测实战指南 开篇:为什么选择STANet进行遥感变化检测? 当我们需要监测城市扩张、灾害评估或基础设施变化时,遥感变化检测技术显得尤为重要。传统方法往往受限于光照变化和配准误差ÿ…...
西门子博图V17变量导入昆仑通态MCGS Pro的保姆级避坑指南(含DB块偏移量设置)
西门子博图V17与MCGS Pro高效数据对接实战指南 在工业自动化系统集成中,西门子TIA Portal(博图)与昆仑通态MCGS Pro触摸屏的数据交互是常见需求。许多工程师在变量导入环节频繁遭遇DB块偏移量异常、变量名截断、数据类型不匹配等"暗坑&q…...
3步解锁百度网盘满速下载:告别限速困扰的完整方案
3步解锁百度网盘满速下载:告别限速困扰的完整方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的非会员下载速度而烦恼吗?面对100KB/…...
AI代理治理零风险上线:asqav观察模式与渐进式集成实践
1. 项目概述:在AI代理上线后,如何安全地引入治理机制你花了好几周时间,终于把那个AI代理流水线给搭起来了。从LangChain的链式调用,到精心设计的工具函数,再到与外部API的集成,每一个环节都调试得服服帖帖。…...
Midjourney生成图落地PS的7大断层痛点:从提示词对齐、分辨率陷阱到图层级精修,一文打通AI与专业图像处理全链路
更多请点击: https://intelliparadigm.com 第一章:Midjourney与Photoshop整合方案的底层逻辑与工作流重构 Midjourney 生成的图像虽具高美学质量,但缺乏图层控制、非破坏性编辑及像素级精度,而 Photoshop 正是弥补这一缺口的核心…...
研究生必备|5款主流文献引用工具深度测评:从课程论文到毕业答辩,哪款能让你省下20小时格式调整时间?
凌晨3点,你盯着Word里200多条参考文献发呆:导师刚通知改用APA格式,而你手动调了一整天的GB/T 7714全得推倒重来。投稿被拒,只因参考文献格式不符合期刊要求。课程论文、小论文、开题报告、毕业大论文……每一次都是格式地狱。本文…...
应对2026检测算法:论文AI率居高不下怎么救?5款降AI工具深度实测
最近不少学弟学妹在后台跟我倒苦水,说查重率好不容易低了,结果AI率越改越高。眼看临近DDL,生怕又因为这个耽误答辩。 作为已经摸爬滚打出来的老学长,今天我就根据我总结出来的经验,从检测系统的底层逻辑开始讲起&…...
全方位降本增效,Captain AI重构OZON运营成本结构
当前OZON市场竞争日趋激烈,人力、物流、广告、库存等各项运营成本持续攀升,利润空间不断压缩,“降本”与“增效”成为商家生存发展的核心命题。不同于单一工具仅能优化某一项成本,Captain AI立足OZON商家全运营场景,以…...
为Dify扩展AI图表与文档生成能力:微服务架构实战指南
1. 项目概述:为Dify打造专属的AI图表与文档生成工具箱如果你正在使用Dify构建自己的AI应用,并且希望让AI不仅能生成文字,还能直接输出流程图、思维导图、PPT甚至试卷,那么这个项目就是为你准备的。brightwang/dify-tool-service是…...
GDScript Mod Loader:为Godot游戏打造专业模组生态的完整指南
1. 项目概述:为你的Godot游戏注入社区活力如果你是一名使用Godot引擎的独立游戏开发者,或者是一位热衷于为喜爱的游戏创造新内容的玩家,那么“模组”这个概念你一定不陌生。模组,或者说Mod,是游戏社区生命力的重要源泉…...
