分治思想对数组进行排序-归并排序

由于新手阶段的我对于归并的代码逻辑并不能很直观的理解代码的执行逻辑,所以本文我将会对于这个归并排序算法进行自我观点的总结,以便后续忘了,回来看看,能快速拾起思路.不会想现在每次都需要花很多时间去理解思路.

java 复制代码
/**
 * 归并排序
 */
数组nums={5,3,4,2,1}

public class Main {

    int[] tmp;
    
    public void mergeSort(int[] nums,int left,int right){
        if(left>=right) return;//判断数组是否符合原子性,及不能再分
        
        int mid=(left+right)/2;//按照mid=2下标进行数组拆分[5,3,4]和[2,1]
        
        mergeSort(nums,left,mid);//进入做递归
        mergeSort(nums,mid+1,right);//进入右递归

           
        //左右递归完后进行比较
        int cur1=left,cur2=mid+1,i=0;

        while(cur1<=mid && cur2<=right){
         //较小的元素放前面
            tmp[i++]=nums[cur1]<=nums[cur2]?nums[cur1++]:nums[cur2++];
        }
        
        //放入较大的元素
        while(cur1<=mid) tmp[i++]=nums[cur1++];
        while(cur2<=right) tmp[i++]=nums[cur2++];
        
        //将tmp排好数组赋值给nums
        for(int j=left;j<=right;j++) nums[j]=tmp[j-left];

    }

}

归并排序可以想成套娃的玩法,将一个复杂的问题分成多个简单的问题,进行解决,就能解决这个复杂的问题,这就是分治思想.归并排序执行顺序和二叉树前序遍历一模一样

相关推荐
青少儿编程课堂12 分钟前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年39 分钟前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
HEJOO91 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude1 小时前
c语言:递归
java·c语言·算法
程序员清风1 小时前
哈希表:从键值映射到高效查找
数据结构·哈希算法·散列表
edtoplort2 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车
人工智能·gpt·算法
蒜香可达鸭2 小时前
让视频生成流水线跑不崩:一个事件溯源的多 Agent 可靠执行框架
算法
小羊没烦恼!2 小时前
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
java·开发语言·前端·数据库·算法·c#
Nebula_g3 小时前
JavaSE拓展:Arrays和Collections工具类
java·开发语言·算法·排序算法·工具类·javase·技术栈
菜鸟~noob2333 小时前
【电子战】 第22篇:误差椭圆与置信区间【含matlab代码】
开发语言·算法·matlab