Java学习手册:(数据结构与算法-排序)归并排序

算法之Java归并排序:深度解析与算法复杂度探究 在编程的学习旅程中,不断探索高效算法是提升编程能力的关键。今天,咱们一起深入研究Java中的归并排序算法,从优化策略、不同实现方式,到算法复杂度的理论分析,希望能和大家共同进步,让我们在算法的世界里收获更多知识! 阅读详情

算法思想:归并排序是用递归和分治方法将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归方法将排好序的半子表合并为越来越大的有序序列。

package com.haobi;
/*
 * 归并排序
 */
public class MergeSort {
	public static void merge(int[] array,int p,int q,int r) {//p-左边位置;q-中间点;r-右边位置;
		int  i,j,k;//循环所用到的参数
		int n1 = q-p+1;//n1-左边数组的长度
		int n2 = r-q;//n2-右边数组的长度
		int[] L = new int[n1];//L[]-左边数组
		int[] R = new int[n2];//R[]-右边数组
		for(i=0,k=p;i<n1;i++,k++) {//在数组中进行循环,将左数组对应的值赋值给左数组
			L[i] = array[k];
		}
		for(i=0,k=q+1;i<n2;i++,k++) {//在数组中进行循环,将右数组对应的值赋值给右数组
			R[i] = array[k];
		}
		for(k=p,i=0,j=0;i<n1&&j<n2;k++) {//同时对左右数组进行操作,当(i<n1&&j<n2)条件不满足时跳出循环
			if(L[i]<R[j]) {//如果左数组元素小于右数组元素
				array[k] = L[i];//左数组元素存进数组
				i++;
			}else {//左数组元素大于右数组
				array[k] = R[j];//右数组元素存进数组
				j++;
			}
			if(i<n1) {//i<n1,则说明左数组有剩余(右数组遍历完成),即剩下数组中的元素依次存入数组尾部
				for(j=i;j<n1;j++,k++) {
					array[k] = L[j];
				}
			}
			if(j<n2) {////j<n2,则说明右数组有剩余(左数组遍历完成),即剩下数组中的元素依次存入数组尾部
				for(i=j;i<n2;i++,k++) {
					array[k] = R[i];
				}
			}
		}
	}
	public static void mergeSort(int[] array, int p,int r) {
		if(p<r) {
			int q = (p+r)/2;//设置q为p和r的中间点
			mergeSort(array,p,q);//左半部分进行归并排序
			mergeSort(array,q+1,r);//右半部分进行归并排序
			merge(array,p,q,r);//对排好序的半子表进行合并
		}
	}
	public static void main(String[] args) {
		int[] array = {19,13,5,27,1,26,31,16};
		mergeSort(array,0,array.length-1);
		for(int i=0;i<array.length;i++) {
			System.out.print(array[i]+" ");
		}
	}
}

程序输出结果如下:

1 5 13 19 26 27 31 

Java数据结构与排序算法动态演示 在软件开发领域,数据结构和排序算法是构建高效程序的基础。Java作为一种广泛使用的编程语言,提供了丰富的数据结构和成熟的排序算法实现。为了深入理解这些概念,本章将介绍数据结构和排序算法的定义、分类及其在Java中的应用。排序算法是一类重要的基础算法,用于将一组无序的数据按照特定的顺序重新排列。其定义包括比较两个元素的大小并按照特定规则交换位置,直到整个数据序列变得有序。排序算法在计算机科学和工程中扮演着至关重要的角色,从数据库索引优化、数据查询,到图形渲染和科学计算等多个领域都有广泛应用。 阅读详情

相关推荐

numeca linux 11,NUMECA FINE/Turbo16下载-NUMECA FINE/Turbo16官方版v16.0 最新版 - 起点软件园...

NUMECA FINE/Turbo16,空气动力学模拟工具,帮助小伙伴随时仿真模拟,让小伙伴可以模拟出最真实的环境,让小伙伴可以轻松完成环境模拟的服务,帮助小伙伴更好的解决自己的课题研究!NUMECA FINE/Turbo16说明1、支持在64位WINDOWS操作系统和LINUX操作系统下运行2、基于全二阶精度的数值格式,保证了计算精度3、采用先进的全多重网格技术和基于密度的求解方法保证了快速的流...

weixin_39858298的博客 1623

Java数据结构与算法-快速排序与归并排序

快速排序 1. 快速排序原理 2. 快排的递归实现 3. 代码 4. 测试排序的速度 1,排序原理 快速排序(Quicksort)是对冒泡排序的一种改进。 基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 2,快速排序的示意图 ...

大美妞的博客 3981

别再混淆了!深入浅出图解四元数姿态控制中的‘误差四元数’(附四种定义对比与仿真)

本文深入解析四元数姿态控制中的误差四元数定义差异,对比四种常见定义(如Q₀∘Q⁻¹与Q⁻¹∘Q₀)及其对PD控制性能的影响。通过刚体动力学仿真验证,揭示定义二(Q⁻¹∘Q₀)在无人机和航天器控制中的最优性能,提供工程实践建议与参数整定技巧,帮助开发者避免常见陷阱并提升控制效率。

weixin_42528191的博客 277

数据结构与算法 - 归并排序:分治思想的经典实现

归并排序是一种基于分治思想的经典排序算法,其核心步骤包括分解、递归排序和合并。本文将详细介绍归并排序的原理、实现和优化方法。通过Mermaid图表展示数组分解与合并过程,并以Java代码实现为例,解析递归排序和双指针合并的具体操作。文章还讨论了算法的时间复杂度(O(nlogn))和空间优化策略,如避免频繁创建临时数组。归并排序以其稳定性和可预测性,在大数据排序和外部排序中具有重要应用价值。无论是算法初学者还是开发者,都能从中获得启发。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

手把手教你用Python+Playwright实现抖音/B站/视频号三平台自动上传(附完整配置流程)

本文详细介绍了如何使用Python和Playwright构建一个多平台视频自动化上传系统,涵盖抖音、B站和视频号三大平台。文章从环境搭建、身份验证持久化、平台特异性上传引擎设计到任务调度与错误处理,提供了完整的配置流程和实战代码,帮助开发者实现高效、稳定的批量上传功能。

weixin_29294975的博客 1150

Yolov26 在 Rk3588 上的 Rknn Onnx 部署实践(模型转换)

本文详细介绍了将YOLOv26 ONNX模型转换为RKNN模型的过程,适用于RK3588平台。主要内容包括:1)量化数据集的创建,通过随机抽取最多400张JPG图片生成校准数据集;2)ONNX转RKNN的完整脚本,支持多种量化方式和平台适配;3)模型转换的参考调用方式;4)模型结构对比展示。文章还提供了注意事项,强调量化数据集图片尺寸、mean/std值需与实际推理一致,并给出精度优化建议。该转换流程为YOLOv26模型在RK3588上的高效部署提供了完整解决方案。

qq_64366203的博客 1126

【JavaSE与数据结构】排序算法之堆排序与归并排序

本篇文章带大家认识排序算法——堆排序与归并排序,堆排序在讲解堆和优先队列的时候已经将原理介绍了一点点,并使用优先级队列实现了堆排序,本文将使用建堆和向下调整的方式实现堆排序,每种排序算法都有一个核心,向下调整是堆排序的核心,而归并排序的核心就是合并两个有序的数组,实现代码语言为java。

未见花闻的博客 1490

GEE开发之Landsat8计算MNDWI和数据分析

上一篇博客介绍了landsat8计算NDWI以及数据的获取,这次介绍MNDWI(改进的归一化差异水体指数)。

等待着冬天的风的博客 8440

用java实现归并排序算法

用java实现归并排序 一. 归并排序的思路 归并排序通过不断的将原数组进行拆分(通常拆分成左右两项),一直到剩下一项,然后分别将拆分的子数组进行合并,此时,两个子数组已经是排好序的,所以合并排序只需要进行一趟排序即可完成,所以此类排序需要两个步骤:1.拆分原数组 2.合并子数组。因此此算法是经典的分治算法。 拆分算法的思路 利用递归,不断得寻找左子数组和右子数组,一直到数组的长度为一 合并算法的...

Mark的博客 1万+

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 370

C# 与 PaddleOCR:一行代码实现高效图片文字识别的实战指南

本文介绍了如何使用 PaddleOCRSharp 进行图像文字识别,涵盖了从环境准备到高级功能的完整流程。首先,通过 NuGet 安装 PaddleOCRSharp 并下载预训练模型。接着,展示了单张图片识别的最小化示例和详细实现,包括模型配置、图片预处理和结果输出。进阶功能部分介绍了多语言和竖排文本识别的实现方法。此外,文章还提供了 WinForms 图形界面开发的完整示例,展示了如何通过界面加载图片、执行识别并展示结果。最后,探讨了批量处理优化策略,如并行处理多张图片以提高性能。通过这些步骤,开发者可以

墨夶的博客 1004

Java学习手册:数据结构与算法汇总

数据结构与算法程序题汇总如下:(不断更新中) 1、PAT(Basic Level)Practise-----1001 2、Java学习手册:(数据结构与算法-链表)如何实现单链表的增删操作? 3、Java学习手册:(数据结构与算法-链表)如何实现单链表排序? 4、Java学习手册:(数据结构与算法-链表)如何从链表中删除重复元素? 5、Java学习手册:(数据结构与算法-链表)如何找出单链表中的倒...

浩比的专栏 3248

MeloTTS 生成 RKNN 模型

摘要: 本方案基于RK3588平台,利用RKNN工具链实现高效语音合成(TTS)。采用MeloTTS开源模型,支持中英文混合语音生成。部署流程包括:1) 导出ONNX模型;2) 转换为RKNN格式;3) 在RK3588开发板运行。关键步骤包含环境配置(RKNN Toolkit2≥1.4.0)、模型转换(非量化处理)及音频处理实现。方案充分发挥RK3588的NPU加速能力,适用于边缘设备语音合成场景

J。 347

数据结构与算法之归并排序

这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。你的支持,我的动力;祝各位前程似锦,offer不断!!!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!你的支持,我的动力;祝各位前程似锦,offer不断!!!

erthrerg的博客 676

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Java数据结构与算法】快速回忆十大排序 + 使用插入排序、归并排序、快速排序对链表进行排序

Java中Arrays.sort()中用的排序。快速掌握十大排序:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。 链表排序:插入排序、快速排序、归并排序

ly甲烷的博客 727

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

暗星涌动 3618

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数据结构与算法——归并排序

归并排序是一种高效的、稳定的、基于分治思想的比较排序算法,由约翰·冯·诺伊曼提出。其核心思想是将一个数组分成两个子数组,分别排序后合并成一个有序数组。

m0_65096391的博客 1421

【Java数据结构与算法】归并排序

归并排序介绍及其实现

lolly1023的博客 676

数据结构与算法之归并排序,三幅图给你弄懂EventBus核心原理

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

2401_84002771的博客 848

数据结构与算法之排序算法-归并排序

本篇文章讲解了排序算法中的归并类排序,希望能帮助到你。

爱是小小的癌的博客 1420

JAVA数据结构与算法之————归并排序

JAVA数据结构与算法之————归并排序 归并排序具体原理网上已经有很多大佬分享了,请自行学习,这里主要分享代码。 1.空间复杂度为O(nlogn)的方法 /* * 空间复杂的为O(nlogn) * */ private void merge1(E[] L, int low, int mid, int hight, String ascOrDesc) { /...

qq_36007633的博客 451

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

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

weixin_50055999的博客 1373

Java八大算法:归并排序

一、什么是归并排序? 1.概念 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的 2.算法原理 基本思想 归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序。 将一个数组拆分为两个,从中间点拆开,通过递归操作来实现一层一层拆分。 从左右数组中选择小的元素放入到临时空间,并移动下标到下一位置。 重复

qq_50838572的博客 4112

数据结构与算法之归并排序(1)

将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。//low:开始位置,middle:分割位置,high:结束位置。//遍历两个数组取出小的数字,放入临时数组中。//每存入一个数字后,临时数组下标后移。//记录第一个数组中需要遍历的下标。//记录第二个数组中需要遍历的下标。//用于记录在临时数组中存放的下标。//用于存储归并后的临时数组。//把小的数组放入临时数组中。//第一个数组的数据更小。//让下标向后移一位。

2401_83641314的博客 605

归并排序算法的JAVA实现

package Utils.Sort;/***归并排序,要求待排序的数组必须实现Comparable接口*/public class MergeSort implements SortStrategy{       private Comparable[] bridge;        /**       *利用归并排序算法对数组obj进行排序       */       public void

刘锡明的专栏 5588

从零开始学习Java数据结构与算法

数据结构通常是指计算机存储组织数据的方式,需要使用数据结构来处理数据。而算法则是指解决问题的方法和步骤,简单来说数据结构是为算法服务的。

BXA 1897
上一篇: Java学习手册:(数据结构与算法-排序)选择排序
下一篇: Java学习手册:(数据结构与算法-排序)堆排序
浩比浩比
博客等级 码龄12年 395粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值