Java算法中的归并排序算法代码实现

 更新时间:2023年12月12日 08:41:12   作者:warybee  
这篇文章主要介绍了Java算法中的归并排序算法代码实现,归并排序使用的是分治思想(Divide and Conquer),分治,顾名思义,就是分而治之,是将一个大问题分解成小的子问题来解决,需要的朋友可以参考下

Java归并排序算法

1、排序原理

归并排序使用的是分治思想(Divide and Conquer),分治,顾名思义,就是分而治之,是将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。

归并排序的核心思想是:如果要排序一个数组,先把数组从中间分成前后两部分,然后再分解,直到每个子序对中只剩一个元素,最后通过递归,层层合并。

在这里插入图片描述

2、代码实现

public static int[] mergeSort(int[] array) {        if (array.length <=1) return array;        //取数组的中间位置        int mid = array.length>>1;        //数组拆分        int[] left = Arrays.copyOfRange(array, 0, mid);        int[] right = Arrays.copyOfRange(array, mid, array.length);        //递归调用        int[] result=merge(mergeSort(left), mergeSort(right));        return result;    }    /**     *  合并,     * @param left  拆分后左侧数组     * @param right 拆分后右侧数组     * @return     */    public static int[] merge(int[] left, int[] right) {        int[] result = new int[left.length + right.length];        int i=0,j=0; // i用来标识左侧数组 , j用来标识右侧数组        for (int index = 0; index < result.length; index++) {            //如果i 大于左侧数组,说明左侧已经没有多余的数组,将剩余的数据拷贝到临时数组            if (i >= left.length) {                result[index] = right[j++];            }            //如果j大于右侧数组,说明右侧已经没有多余的数组,将剩余的数据拷贝到临时数组            else if (j >= right.length) {                result[index] = left[i++];            }            //比较两个数组,如果左侧大于右侧数组,就将右侧数组放入到临时数组            else if (left[i] > right[j]) {                result[index] = right[j++];            }            else{//就将左侧数组放入到临时数组                result[index] = left[i++];            }        }        return result;    }

到此这篇关于Java算法中的归并排序算法代码实现的文章就介绍到这了,更多相关Java归并排序算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot中websocket简单实现

    springboot中websocket简单实现

    本文主要介绍了springboot中websocket简单实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • SpringBoot3 框架快速搭建与项目工程详解

    SpringBoot3 框架快速搭建与项目工程详解

    本文将从项目搭建、核心配置、分层开发、统一返回与异常处理等维度,详细讲解SpringBoot3项目的构建与工程设计,帮助开发者快速上手,感兴趣的朋友跟随小编一起看看吧
    2026-02-02
  • SpringCloud微服务 Sentinel 实战指南

    SpringCloud微服务 Sentinel 实战指南

    文章主要介绍了Sentletinel在微服务中的应用及工作原理,涵盖了流控规则、熔断降级、授权控制等内容,强调了通过合理的限流和降级策略来保护系统稳定运行,感兴趣的朋友跟随小编一起看看吧
    2026-05-05
  • IDEA Servlet 模板设置的方法

    IDEA Servlet 模板设置的方法

    这篇文章主要介绍了IDEA Servlet 模板设置的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 关于Spring MVC框架中拦截器Interceptor的使用解读

    关于Spring MVC框架中拦截器Interceptor的使用解读

    这篇文章主要介绍了关于Spring MVC框架中拦截器Interceptor的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • springMVC不扫描controller中的方法问题

    springMVC不扫描controller中的方法问题

    这篇文章主要介绍了springMVC不扫描controller中的方法问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • MyBatis与MyBatis-Plus的区别详解

    MyBatis与MyBatis-Plus的区别详解

    本文主要介绍了MyBatis与MyBatis-Plus的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Java 中函数作为参数传递方法详解

    Java 中函数作为参数传递方法详解

    文章介绍了Java中函数式编程的概念,包括Lambda表达式、方法引用和函数式接口,通过这些特性,Java可以将函数作为参数传递,从而实现更灵活和简洁的代码,文章还列举了Java内置的函数式接口,并展示了它们在Stream API中的应用,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Java服务cpu100%的解决过程分享

    Java服务cpu100%的解决过程分享

    最近一个任务是优化一个导出的功能,但是点击功能时发现,程序长时间无反应,过一段时间又有反应,通过查看服务的监控发现,服务存在cpu持续100%的情况,下面分享一下我的处理方案和过程,需要的朋友可以参考下
    2024-05-05
  • Java并发系列之JUC中的Lock锁与synchronized同步代码块问题

    Java并发系列之JUC中的Lock锁与synchronized同步代码块问题

    这篇文章主要介绍了Java并发系列之JUC中的Lock锁与synchronized同步代码块,简单介绍了lock锁及锁的底层知识,结合案例给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04

最新评论