MergeSort(Java)

JAVA:实现MergeSort合并排序算法(附完整源码) 阅读详情

实现代码:MergeSort.java

public class MergeSort {
    public int[] sort(int[] input) {
        if (input.length <= 1) return input;
        if (input.length == 2) {
            if (input[0] > input[1]) {
                int temp = input[0];
                input[0] = input[1];
                input[1] = temp;
            }
            return input;
        }
        int mid = input.length / 2;
        int[] firstHalf = sort(getPart(input, 0, mid));
        int[] secondHalf = sort(getPart(input, mid + 1, input.length - 1));
        return mergePart(firstHalf, secondHalf);
    }

    private int[] mergePart(int[] firstHalf, int[] secondHalf) {
        int[] result = new int[firstHalf.length + secondHalf.length];
        int firstIndex = 0, secondIndex = 0, resultIndex = 0;
        while (resultIndex < result.length) {
            if (chooseFirstHalf(firstHalf, firstIndex, secondHalf, secondIndex))
                result[resultIndex++] = firstHalf[firstIndex++];
            else
                result[resultIndex++] = secondHalf[secondIndex++];
        }
        return result;
    }

    private boolean chooseFirstHalf(int[] firstHalf, int firstIndex, int[] secondHalf, int secondIndex) {
        if (firstIndex == firstHalf.length) return false;
        if (secondIndex == secondHalf.length) return true;
        return firstHalf[firstIndex] < secondHalf[secondIndex];
    }

    private int[] getPart(int[] input, int begin, int end) {
        int[] result = new int[end - begin + 1];
        for (int i = begin; i <= end; i++) result[i - begin] = input[i];
        return result;
    }
}


 

测试代码:MergeSortTest.java

import org.junit.*;

import static org.junit.Assert.*;

public class MergeSortTest {
    MergeSort mergeSort;
    
    @Before
    public void setUp() {
        mergeSort =  new MergeSort();
    }
    
    @Test
    public void should_return_1_for_merge_sort_1() {
        int[] input = {1};
        int[] expected = {1};
        assertArrayEquals(expected, mergeSort.sort(input));
    }

    @Test
    public void should_return_12_for_merge_sort_21() {
        int[] input = {2,1};
        int[] expected = {1,2};
        assertArrayEquals(expected, mergeSort.sort(input));
    }

    @Test
    public void should_return_1234_for_merge_sort_3214() {
        int[] input = {3,2,1,4};
        int[] expected = {1,2,3,4};
        assertArrayEquals(expected, mergeSort.sort(input));
    }

    @Test
    public void should_return_12345_for_merge_sort_54321() {
        int[] input = {5, 4, 3, 2, 1};
        int[] expected = {1, 2, 3, 4, 5};
        assertArrayEquals(expected, mergeSort.sort(input));
    }
}


 

JAVA:以递归形式实现MergeSort合并排序算法(附完整源码) 阅读详情

相关推荐

归并排序算法(Merge Sort)的Java实现

归并算法的简单举例

归并排序(MergeSort) Java实现及解析

package class03; public class Code01_MergeSort { // 递归方法实现 public static void mergeSort1(int[] arr){ if(arr == null || arr.length < 2){ return; } process(arr, 0, arr.length - 1); } // 递归函数的定义:让arr在[L

HLComet_Bay_WC的博客 2191

MergeSort(合并排序)

MergeSort合并排序

java归并排序(Merge Sort)—— 详解 + 案例 +时间复杂度

文章目录前言排序原理代码实现时间复杂度 前言 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 排序原理 需求: 排序前:{8,4,5,7,1,3,6,2} 排序后:{1,2,3,4,5,6,7,8} 排序原理: 尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。 将相邻的两个

qq_46533383的博客 8366

杭电计算机组成原理课程设计-实验七-寄存器堆设计实验

寄存器堆实验实验原理实验内容模块功能说明模块逻辑引脚图寄存器堆模块代码REG模块测试用例REG-ALU测试用例实验结果记录 寄存器堆实验结果及分析ALU_REG运算器模块实验结果及分析探索与思考 实验原理   32×32位的寄存器堆模块示意图如图所示,含有32个寄存器,每个寄存器32位。该寄存器堆具有A和B两个读端口,分别由 5 位的寄存器编号 R_Addr_A 和 R_Addr_B 来寻址 2 个寄存器,读出的数据则由 R_Data_A(32 位)和R_Data_B(32 位)输出。读访问时,没有使能或者

HDU-整蛊小子-⏰☂️/蚂蚁集团研发工程师 1万+

U24时钟信号上升下降沿出现非单调性--简单分析

交换机U24时钟信号上升下降沿出现非单调性--简单分析

qq_45185504的博客 1131

归并排序java(内附超详解图文讲解)

归并排序介绍:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide- and-conquer)策略(分治法将问题分(divide)成一-些 小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 归并排序思想示意图1-基本思想: 归并排序思想示意图2-合并相邻有序子序列: 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后- -次合并,要将[4,5,7,8]和[1

Javascript_tsj的博客 6830

复现论文报错解决

博主复现论文代码过程中遇到的各种报错及解决方案~

rellvera的博客 1058

Java算法之归并排序(Merge Sort)

归并排序是一种采用分治法的排序算法,它将排序问题分解为多个较小的子问题来解决,然后将这些子问题的解合并以得到原问题的解。归并排序以其稳定性和高效率而著称,尤其适用于大数据集的排序。归并排序是一种非常强大的排序算法,它通过分治法有效地解决了大规模数据集的排序问题。虽然它需要额外的内存空间,但其稳定性和高效率使其成为许多应用场景下的首选算法。

weixin_38959316的博客 938

UE5游戏逆向实战:用FModel提取.pak文件中的3D模型(附Dumper-7避坑指南)

本文详细介绍了如何使用FModel工具从UE5游戏的.pak文件中提取3D模型,并提供了Dumper-7的避坑指南。内容涵盖FModel工具链配置、UE5特有的unversioned properties问题解决方案、Dumper-7实战流程以及模型后处理技巧,帮助开发者高效获取游戏资产。

weixin_30872499的博客 422

windows11 远程桌面连接 通过代理连接RDP桌面报错 错误代码0x904 拓展错误代码0x7

打开windows Defender防火墙设置--允许应用通过防火墙更改设置--允许其他应用浏览--进入C:\WINDOWS\system32目录选择mstsc.exe进入C:\Windows\SysWOW64目录h'qmstsc.exe添加后列表里多了一个远程桌面连接,还有一个Remote Desktop Connection,配置网络权限后保存连接成功。

weixin_43978891的博客 1万+

java中mergesort函数怎么用_MergeSort与TimSort,ComparableTimSort

MergeSort归并排序对已经反向排好序的输入时复杂度为O(n^2),而TimSort就是针对这种情况,对MergeSort进行优化而产生的,平均复杂度为nO(log n),最好的情况为O(n),最坏情况nO(log n)。并且TimSort是一种稳定性排序。思想是先对待排序列进行分区,然后再对分区进行合并,看起来和MergeSort步骤一样,但是其中有一些针对反向和大规模数据的优化处理。通过一...

weixin_33433067的博客 1221

Blender学习笔记——制作向量场

#下载Blender - UE4 - FGA Vector Field Editor插件的压缩包,Github上的下载地址如下:https://github.com/isathar/Blender_UE4_VectorFieldEditor #下载并解压后将FGA VectorFields文件夹复制到C:\Program Files\Blender Foundation\Blender 2.83\2.83\scripts\addons目录下,此步骤可根据blender安装的位置自行调整,只要放入addon

wychao2020的博客 1724

MergeSort Java

试着写写Merge Sort 上代码: public static List Mergesort(List list, int start, int end){ List result = new ArrayList(); if(start == end){ result.add(list.get(start)); return result; } i

爱吃饭的小胖子的博客 263

Rocky Linux 9.2:利用LVM动态调整/home与/根分区空间分配

本文详细介绍了在Rocky Linux 9.2系统中,如何利用LVM(逻辑卷管理器)动态调整/home与根分区(/)的空间分配。针对根分区空间不足而/home分区闲置的常见问题,文章提供了从检查磁盘布局、备份数据、卸载分区、调整逻辑卷大小到重建文件系统的完整操作步骤,并重点说明了XFS与EXT4文件系统在缩容时的不同处理方法,帮助系统管理员安全、在线地实现存储空间的灵活调配。

weixin_29271263的博客 177

Altium Designer(AD24/25)导入DXF或DWG结构文件的方法

DXF(Drawing Exchange Format)和DWG(Drawing)是两种常见的CAD(计算机辅助设计)文件格式,常用于结构和硬件之间的沟通。本文介绍Altium Designer(AD24/25)导入DXF或DWG结构文件的方法。

fydar的博客 1439

java中如何引入mergesort.mergesort_mergesort Merge Sort 问题

归并排序中算法MergeSort()是怎么回事?void MergeSort(int R[],int low,int high) { int mid; if(lowMerge Sort 问题#include using namespace std; // merge function void merMerge Sort 问题 20 #includeusingnamespacestd;//mer...

weixin_39602560的博客 318

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

mergesort java 源码_Java Mergesort示例

/*来自 N o w J a v a . c o m*/import static java.lang.System.out;class MergeImprove {private static final int CUTOFF = 7;private static void insertionSort(Comparable[] a, int lo, int hi) {for (int i =...

weixin_42525385的博客 173

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java 归并排序(MergeSort)算法实现

Java 归并排序(MergeSort)算法实现public class MergeSort { public static void merge(int [] A,int p,int q,int r){ //复制数组 int n = r-p+1; int [] R = A.clone(); int i = p;

软货成熊之路 658

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java中mergesort函数怎么用,由mergeSort引发的一些思考

重新梳理一下归并排序以及一些相关的东西。对于归并排序大家如果需要回忆下是个什么东西的话,可以点击这个链接,里面有各种排序的动画演示以及讲解,比我再用文字赘述一遍要好得多,功能相当强大。先给出归并排序的js代码实现:function mergeSort(arr, l, r) {if (l === r) {return;}let mid = Math.floor((r + l) / 2);mergeS...

weixin_42104906的博客 726

mergesort的java实现

这是我第一次写博客,我也希望通过写博客的这个过程,与大家(也许认识,也许不认识,never mind)分享我的经验和感受。这是mergesort的java实现。刚开始对sort进行一些了解。所以参照网上的一些经验和分享,自己写了写。并整合了下来。package sorting;public class MyMergeSort { private int[] array; p...

chenduan3411的博客 192

mergesort java 源码_MergeSort(Java)

实现代码:MergeSort.javapublic class MergeSort {public int[] sort(int[] input) {if (input.length <= 1) return input;if (input.length == 2) {if (input[0] > input[1]) {int temp = input[0];input[0] = in...

weixin_28309723的博客 277

java中如何引入mergesort.mergesort_Mergesort in Java | 学步园

1.2.MergesortDuring theMergesortprocess the object in the collection are divided into two collections. To split a collection,Mergesortwilltake the middle of the collection and split the collectio...

weixin_39616003的博客 131

Mergesort in Java

1. Mergesort 1.1. Overview The Mergesort algorithm can be used to sort a collection of objects. Mergesort is so calleddivide and conquer algorithm. Divide and conquer algorithms divide t

caoguanling2011的专栏 614

归并排序 MergeSort的解析和java实现

归并排序 mergeSort 的解析和java实现 mergeSort是稳定的O(nlogn)的排序算法,但是相比起其他的排序算法来说需要额外O(n)的空间。 归并排序的主体思想就是把一整个数组不断的对半拆分,直到每一个子数组中都只有两个元素。然后对这两个元素进行排序。在对最小的子数组进行排序之后,进行合并,把两个子数组中最小的一个放到新数组的头部然后指针向后移。 class MergeSort{ public static void mergeSort(int[] arr){ int[] copy

Dh0le的博客 430
上一篇: 二叉搜索树(BST)demo
下一篇: QuickSort(Java)
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值