尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

归并排序 Java 实现 + 思路详解

归并排序 Java 实现 + 思路详解
📅 发布时间:2026/7/23 13:19:14

一、核心思想(分治算法)

归并排序两大阶段:分 + 治

  1. 分(分割):不断把当前数组对半拆分成左右两个子数组,直到每个子数组只有1 个元素(单个元素天然有序)。
  2. 治(合并):将两个已经有序的子数组,合并成一个有序数组;不断向上合并,最终整个数组有序。

算法特性(面试重点)

  • 时间复杂度:稳定 O (nlogn),最好、最坏、平均都一样,不受原始数组顺序影响
  • 空间复杂度:O(n),需要额外辅助数组
  • 稳定排序
  • 缺点:需要开辟额外内存,不适合超大数量级内存紧张场景

二、完整代码实现

java

运行

public class MergeSort { public static void main(String[] args) { int[] arr = {8, 4, 5, 7, 1, 3, 6, 2}; System.out.println("排序前:"); printArr(arr); // 创建临时数组,避免递归反复创建,优化性能 int[] temp = new int[arr.length]; mergeSort(arr, 0, arr.length - 1, temp); System.out.println("排序后:"); printArr(arr); } /** * 递归分割数组 * @param arr 原始数组 * @param left 当前区间左边界 * @param right 当前区间右边界 * @param temp 合并使用的临时数组 */ public static void mergeSort(int[] arr, int left, int right, int[] temp) { // 递归终止条件:区间只有一个元素 if (left >= right) { return; } // 中间分割点 int mid = left + (right - left) / 2; // 递归拆分左区间 [left, mid] mergeSort(arr, left, mid, temp); // 递归拆分右区间 [mid+1, right] mergeSort(arr, mid + 1, right, temp); // 左右两个子区间都有序后,进行合并 merge(arr, left, mid, right, temp); } /** * 合并两个有序区间:[left,mid] 和 [mid+1,right] */ public static void merge(int[] arr, int left, int mid, int right, int[] temp) { int i = left; // 左有序数组起始指针 int j = mid + 1; // 右有序数组起始指针 int t = 0; // temp数组指针 // 依次比较左右两个有序数组,小的放入临时数组 while (i <= mid && j <= right) { if (arr[i] <= arr[j]) { temp[t++] = arr[i++]; } else { temp[t++] = arr[j++]; } } // 左边剩余元素移入temp while (i <= mid) { temp[t++] = arr[i++]; } // 右边剩余元素移入temp while (j <= right) { temp[t++] = arr[j++]; } // 将temp中有序数据拷贝回原数组对应区间 t = 0; while (left <= right) { arr[left++] = temp[t++]; } } // 打印数组 public static void printArr(int[] arr) { for (int num : arr) { System.out.print(num + " "); } System.out.println(); } }

三、流程简单推演

数组[8,4,5,7,1,3,6,2]

  1. 不断对半拆分:[8,4,5,7]和[1,3,6,2]继续拆分直到单元:[8] [4] [5] [7] [1] [3] [6] [2]

  2. 两两合并:[8]+[4]→[4,8][5]+[7]→[5,7][1]+[3]→[1,3][6]+[2]→[2,6]

  3. 继续向上合并:[4,8] + [5,7]→[4,5,7,8][1,3] + [2,6]→[1,2,3,6]

  4. 最终合并两大块:[4,5,7,8] + [1,2,3,6]→[1,2,3,4,5,6,7,8]

四、面试对比小结

  1. 快排:不稳定,原地排序(少量额外空间),平均性能最好;最坏 O (n²)
  2. 归并排序:稳定,必须 O (n) 辅助空间;复杂度稳定 O (nlogn)
  3. 堆排序:不稳定,O (1) 额外空间,O (nlogn)

拓展:Java 底层Arrays.sort()基础类型使用双轴快排; 引用类型使用归并排序(保证稳定)。

相关新闻

  • 无需长时热处理!ACS Applied Energy Materials:0.5 秒焦耳热让碳纤维/MnOx 电极快速成型
  • Unity换装系统骨骼绑定避坑指南:5大常见错误与修复方案
  • 2026 推荐肇庆非急救长途转运|正规救护车跨省护送服务 - 官方推广

最新新闻

  • 【RT-DETR涨点改进】TCSVT 2026顶刊 | 卷积创新改进篇 | 引入FRConv模糊残差卷积,自适应增强与目标相关的邻域信息,含10种创新改进点,助力遥感图像目标检测任务,有效涨点
  • 运动耳机怎么选不踩坑?十款热门运动耳机评测,找到你的专属搭档
  • 程序员转型大模型的四大方向与实战路径
  • 万国中国售后服务门店|售后电话及地址权威公告(2026年7月最新) - 万国中国服务中心
  • 如何做好劳务队伍的管理?本文堪称经典,所有管理者必看
  • Tiva TM4C1294NCPDT微控制器:高性能嵌入式网络与实时控制核心解析

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号