Java排序算法总结之(四)——归并排序

外部归并排序Java实现 NULL 博文链接:https://yeelor.iteye.com/blog/1964843 立即下载

排序方法可以分为两种:内部排序 和 外部排序

内部排序的方法很多,常用的大致可以分为:

  1. 插入排序(直接插入排序、折半插入排序、希尔排序)
  2. 交换排序(冒泡排序、快速排序)
  3. 选择排序(简单选择排序、堆排序)
  4. 归并排序
  5. 基数排序

归并排序:

基本思想:将两个或两个以上的有序表组合成一个新的有序表。

归并的思路很好理解,有下面的示例:

示例:

           

Java代码:

public class MSort {
	public static void sort(int[] s) {
		int[] reg = new int[s.length];// 创建一个寄存器数组,存储排好序数组,之后再复制给原数组
		merge(s, reg, 0, s.length - 1);// 调用merge函数实现归并
	}

	private static void merge(int[] s, int[] reg, int left, int right) {
		if (left >= right)// 递归出口,当left = right时,即单个元素进行比较
			return;

		int mid = left + ((right - left) >> 1);// 每次对数组取半,前后分别排序
		int left2 = mid + 1;// 后部分从mid + 1开始,到right
		int left1 = left;// 前部分从left 开始,到mid
		merge(s, reg, left1, mid);
		merge(s, reg, left2, right);

		int n = left;// 用于更新数组 reg 中已排好序的数据
		while (left1 <= mid && left2 <= right) {// 依次比较前后两部分的数据,并存入reg 中
			reg[n++] = s[left1] < s[left2] ? s[left1++] : s[left2++];
		}
		while (left1 <= mid) {// 将合并后余下数组中的数据存入reg 中
			reg[n++] = s[left1++];
		}
		while (left2 <= right) {
			reg[n++] = s[left2++];
		}
		for (n = left; n <= right; n++) {// 将排好序的数组赋给原数组
			s[n] = reg[n];
		}
	}
}


Clion编译stm32cube初始化工程时non constant or forward reference address expression for section .ARM.extab报错 相信应该有同学在看了稚晖君关于clion开发stm32的文章之后也想在自己PC上实现“优雅の嵌入式开发”遇到和我类似的问题。他的文章是22年写的,我个人猜测应当是版本更新导致的不适配。意思就是说 READONLY 只能在gcc11以后的版本中使用,gcc10及以前的版本将无法正确识别,也就有如下错误。或者就可以将gcc升级至最新的版本。记得在clion工具链中修改c,cpp编译器的位置。可以将文本括号中的 READONLY 全部删除。当时由于没有注意到这行注释导致在这里卡了好久。 阅读详情

相关推荐

macOS安装Cplex+yalmip

macOS安装Cplex+yalmip

DS 4248

排序算法总结之归并排序

一,归并排序介绍 归并排序是一个典型的基于分治的递归算法。它不断地将原数组分成大小相等的两个子数组(可能相差1),最终当划分的子数组大小为1时(下面代码第17行left小于right不成立时) ,将划分的有序子数组合并成一个更大的有序数组。为什么是有序子数组??? 归并排序的递归公式:T(N) = 2T(N/2) + O(N) 从公式中可以看出:将规模为 N 的原问题分解成两个规模 N/2 ...

weixin_34167819的博客 222

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 939

归并排序(Java实现)

归并排序是一种高级排序算法,适用于外部排序,时间复杂度为O(nlogn),但是由于必须引入辅助数组,空间复杂度为O(n)

Hackeryuan的博客 569

加密视频如何破解 如何解除机器码绑定的视频

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 如何破解加密...

Q-980767270的博客 5万+

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

排序算法Java实现——归并排序

归并排序(也可以叫合并排序),其实归并排序的本质就是合并排序。 它是与插入排序、交换排序、选择排序不同的一类排序方法,不同之处在于: 它要求:待排序序列是由若干个有序子序列组成。 那么究竟什么是归并排序呢?归并这个词到底是什么意思? 首先可以理解为就是合并,然后就是这个词的由来,可以说归并这个词是个生造词。 “归并”由merge翻译而来,所以归并排序亦可以翻译为:”合并排序“。因为此算法的

你只管努力, 3025

NVMe-MI 协议解析:带外管理框架与实现原理

本文深入解析了NVMe-MI协议,这是一种用于NVMe固态硬盘的标准化带外管理接口。文章详细阐述了其独立于操作系统的管理框架,通过MCTP协议栈实现,支持SMBus/I2C、PCIe VDM和I3C等物理层,从而在系统故障时仍能可靠地进行健康监控、固件升级等关键运维操作,是现代数据中心存储管理的核心基础设施。

lll78的博客 961

排序算法Java代码实现(四)—— 归并排序

本篇内容: 归并排序 归并排序 算法思想: 将两个或两个以上的有序表合并成一个新的有序表, 即把待排序序列分成若干个子序列,每个子序列是有序的,然后在把有序子序列合并为整体有序序列. 此算法分为两步: (1)把数组等长切分; (2)把切分后的数组进行排序,然后合并; 通过切分方法的递归调用,可以将数组切分到最小(2个元素)的组合; 代码: (1)合并两...

weixin_30763397的博客 91

Sourcetree与Gitee的搭配使用

初次将gitee与sourcetree联合起来使用,还是遇到了不少问题,其中最让人烦恼的就是在我修改了一下用户名之后,便无法在Sourcetree直接推送到gitee,很是让人郁闷。本文处理Sourcetree与gitee搭配使用过程中的问题:Sourcetree身份验证失败,无法推送;Sourcetree推送时,无法显示要推送的分支;Sourcetree远端上面有感叹号。

年少时的棉花糖 4435

DeerFlow 系列教程 第十一篇 | Sandbox 沙箱与 Memory 记忆——安全执行与持久认知

用户请求│▼Lead Agent├── 系统提示词组装│ ├── <memory> 段 ← Memory 系统注入用户记忆│ ├── <skill_system> 段│ └── <subagent_system> 段│├── 工具调用│ ├── read_file ├── Sandbox 系统提供隔离执行│ ├── write_file├── 路径虚拟化 + 安全验证│└── 对话结束│▼│├── 过滤消息(去除工具调用中间步骤)├── 检测纠正/强化信号。

weixin_43674738的博客 161

排序算法小结(四)——归并排序(Java实现)

排序算法小结(四)——归并排序

xx2014301318的博客 315

如何使用Docker部署OpenClaw小龙虾(docker compose快速部署)

本文以飞牛NAS为例💻,带大家一步步完成Docker部署OpenClaw小龙虾🦞。不管你是用NAS、云服务器还是本地电脑,只要支持Docker,都可以参考这个步骤来安装部署⚡

XiaoqiangClub的博客 727

算法(Java实现)-图解十大经典排序算法(四)——归并排序

1、归并排序 1.1归并排序介绍 归并排序(MERGE-SORT) :是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 说明:可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程 算法描述: 把长度为n的输入序列分成两个长度为n/2

jQueryZK的博客 2396

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java八大排序算法(四)之归并排序

图解排序算法(四)之归并排序基本思想  归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采...

将来的你一定会感谢现在努力的自己 256

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

七大排序算法详解——排序(四)归并排序(附Java代码)

排序:所谓排序,就是使一串记录,按照其中的某个或某几个关键字的大小,递增或递减排列起来的操作。稳定性:在待排序的记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录的相对次序保持不变,则称这种排序算法是稳定的。内部排序:把数据全部加载到内存中进行排序。外部排序:数据太多,内存不能存储了,将数据放到磁盘、U盘上进行排序。

m0_63793861的博客 175

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

排序算法之归并排序

归并排序和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。

9288

排序算法(四):归并排序

归并排序作为一种经典的分治算法,在处理大规模数据时展现了其强大的性能和稳定性。它通过递归地分割和合并来实现排序,其时间复杂度为O(n log n),是一个理想的稳定排序算法。尽管它的空间复杂度较高,且实现相对复杂,但在许多应用场景中,归并排序仍然是一个非常有效的排序工具。在选择排序算法时,我们可以根据实际情况选择合适的算法,例如对于大规模数据或者需要稳定排序的场景,归并排序无疑是一个优选。而对于小规模数据,插入排序或快速排序可能会更高效。

一碗黄焖鸡三碗米饭的博客 1250

Java 与排序算法(5):归并排序

归并排序(Merge Sort)是一种基于分治思想的排序算法。它将待排序的数组分成两个长度相等的子数组,然后对这两个子数组分别进行归并排序,最后将两个排好序的子数组合并成一个有序的数组。

暗星涌动 3619

Java排序算法之<归并排序>

归并排序是一种采用分治法的高效排序算法。其时间复杂度为O(nlogn),空间复杂度为O(n),具有稳定性。算法通过递归地将序列二分至单个元素,再两两合并有序子序列完成排序。具体实现包括:申请同等大小的临时数组、递归分组、比较合并等步骤。文中提供了完整的Java代码示例,展示了序列[28,19,8...9]的完整排序过程,最终输出有序结果[8,9,10...28]。该算法适合处理大规模数据,但需要额外存储空间。

weixin_50055999的博客 1374

<排序算法四>快速掌握“(2路)归并排序”

快速掌握递归排序的递归、非递归实现,复杂度

a1302993809的博客 1437

图解排序算法(四)之归并排序

基本思想   归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 分而治之   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。 合并相邻有序子序列   再...

qq_40826814的博客 140

Java排序算法之归并排序

Java排序算法之归并排序算法概述归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段

Science Explorer 497

java排序算法之归并排序

一、排序算法概述 常用的内部排序方法有:交换排序(冒泡排序、快速排序)、选择排序(简单选择排序、堆排序)、插入排序(直接插入排序、希尔排序)、归并排序、基数排序(一关键字、多关键字)。 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序。 选择排序算法的依据:任何排序算法在数据量小的时候基本体现不出来差距。选择依据有 1.数...

孔子说 428

java泛型中使用的排序算法——归并排序及分析

一、引言 我们知道,java中泛型排序使用归并排序或TimSort。归并排序以O(NlogN)最坏时间运行,下面我们分析归并排序过程及分析证明时间复杂度;也会简述为什么java选择归并排序作为泛型的排序算法。 二、图解归并排序过程 算法思想:采用分治法: 分割:递归地把当前序列平均分割成两半。 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。 归并操作:指的是将两个已经...

weixin_34080903的博客 217
上一篇: Java排序算法总结之(三)——选择排序(简单选择排序、堆排序)
下一篇: Java排序算法总结之(五)—— 基数排序
Appletable
博客等级 码龄14年 0粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值