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

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

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];

    }

}

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

相关推荐
wabs6663 分钟前
关于二叉树【力扣144.二叉树的前序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
郝学胜-神的一滴13 分钟前
C++20 高级编程 004:从初始化、内存到const系列关键字
开发语言·算法·编程·软件构建·c++20
kyle~19 分钟前
点云配准--- 迭代最近点 ICP 求解
线性代数·算法·机器学习
LuminousCPP27 分钟前
数据结构-二叉树(三):堆复杂度证明与 Top-K 问题|错位相减推导 + 海量数据内存优化
c语言·数据结构·笔记·排序算法
qq74223498429 分钟前
Gradio 极简入门:三分钟为AI模型打造交互界面,并对比Streamlit与Dash如何选型
人工智能·算法·大模型·交互·dash
1000世界小札7 小时前
《大话数据结构》第9章精读:归并排序与快速排序完整 C++ 实现
数据结构·c++·算法
2601_956121979 小时前
背包基础篇(01、完全、分组、多重、混合)
c++·算法·动态规划
兴通物联科技10 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
月华路13 小时前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法