当前位置: 首页 > news >正文

排序算法-归并排序

归并排序是一种分治算法(Divide and Conquer)。对于给定的一组数据,利用递归与分治技术将数据序列划分成为越来越小的半子表,在对半子表排序后,再用递归方法将排好序的半子表合并成为越来越大的有序序列。

核心思想

  1. 分解(Divide):将数组递归地分成两半,直到子数组长度为 1。

  2. 合并(Merge):将两个已排序的子数组合并成一个有序数组。

合并的过程

 代码实现

package Sort;import java.util.Arrays;public class MergeSort {public static void main(String[] args) {int[] res = getMergeSort(new int[]{8,5,7,9,1,6,3,4,2});for (int i = 0; i < res.length; i++) {System.out.print(res[i]+" ");}}//使用递归实现归并排序,升序public static int[] getMergeSort(int[] nums){if (nums.length<2) return nums;//切分数组,然后递归排序,并用merge合并int mid = nums.length/2;int[] leftNums = Arrays.copyOfRange(nums,0,mid);int[] rightNums = Arrays.copyOfRange(nums,mid,nums.length);return merge(getMergeSort(leftNums),getMergeSort(rightNums));}public static int[] merge(int[] leftNums,int[] rightNums){int[] result = new int[leftNums.length + rightNums.length];for (int index = 0, i = 0, j = 0; index < result.length ; index ++) {if (i>=leftNums.length){// 左边数组已经取完,那就完全取右边数组即可result[index] = rightNums[j++];} else if (j>=rightNums.length) { // 右边数组已经取完,那就完全取左边即可result[index] = leftNums[i++];} else if (rightNums[j] < leftNums[i]) { // 升序:右边数组的元素小于左边数组,取右边数组的值result[index] = rightNums[j++];}else { // 升序:左边数组的元素小于右边数组,取左边数组的值result[index] = leftNums[i++];}}return result;}}

时间复杂度分析

情况时间复杂度说明
最坏情况O(n log n)无论输入数据如何分布,都必须完整执行所有分解和合并操作
最好情况O(n log n)即使输入已经有序,仍需进行全部合并操作
平均情况O(n log n)算法性能稳定,不受输入数据分布影响

空间复杂度分析

组成部分空间消耗说明
临时数组O(n)合并操作需要与原始数组等大的临时存储空间
递归调用栈O(log n)递归深度为 log₂n,每层递归需要保存常数级的参数
总空间O(n)临时数组的空间占用主导(通常说的空间复杂度指除输入外的额外空间需求)

相关文章:

  • istio in action之Gateway流量入口与安全
  • OpenHarmony平台驱动开发(十一),PIN
  • 01.three官方示例+编辑器+AI快速学习webgl_animation_keyframes
  • 解密火星文:LeetCode 269 题详解与 Swift 实现
  • 前端指南——项目代码结构解析(React为例)
  • 在 Ubuntu 上安装并运行 ddns-go 教程
  • 前端面试每日三题 - Day 29
  • 45.传导发射整改摸底测试方法
  • 37-智慧医疗服务平台(在线接诊/问诊)
  • rtsp,。。。。
  • 探索Stream流:高效数据处理的秘密武器
  • 小红书视频无水印下载方法
  • CSdiy java 07
  • 数字IC前端学习笔记:锁存器的综合
  • 前端工程化和性能优化问题详解
  • 位移监测仪,精准测量,专业守护
  • 单调栈所有模版(2)
  • 制造单元智能化改造与集成技术平台成套实训设备
  • 7、三维机械设计、装配与运动仿真组件 - /设计与仿真组件/3d-mechanical-designer
  • 线程的生命周期·
  • 19个剧团15台演出,上海民营院团尝试文旅融合新探索
  • 数理+AI+工程,上海交大将开首届“笛卡尔班”招生约20名
  • 康子兴评《文明的追求》|野人脚印:鲁滨逊的恐惧与文明焦虑
  • 治沙“异瞳”男生疑似摆拍,团队称合作12天多期视频为策划拍摄
  • 人民日报整版聚焦:铭记二战历史,传承深厚友谊
  • 万玲、胡春平调任江西省鹰潭市副市长