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

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

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

    }

}

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

相关推荐
荆棘鸟智能1 小时前
河道采砂船识别与轨迹追踪怎么做?检测、跟踪与电子围栏实战思路
人工智能·算法·目标检测
揽星河..1 小时前
【初阶数据结构】常见的排序算法
数据结构·排序算法·1024程序员节
DFT计算杂谈1 小时前
GSAS-II X 射线衍射(XRD)数据转换为对分布函数(PDF,Pair Distribution Function)
算法·机器学习·pdf
绕灵儿2 小时前
火灾检测-应用场景-YOLO训练记录
人工智能·算法
YLCHUP2 小时前
【模拟&STL】题解:AT_abc203_e [ABC203E] White Pawn_基础算法_数据结构_STL模板库_AtcoderABC_C++算法竞赛
数据结构·c++·算法·leetcode·动态规划·哈希算法·近邻算法
啊啊啊啊啊!!!!2 小时前
【c++】⽤哈希表封装myunordered_map和myunordered_set
数据结构·哈希算法·散列表
(●—●)橘子……2 小时前
力扣 第525场周赛 练习理解
数据结构·python·学习·算法·leetcode
Tt有了t2 小时前
Redis的数据结构
数据结构·数据库·redis
Rain的Java大神之路2 小时前
LeetCode 21 合并两个有序链表:一道 Easy 题,凭什么刷掉一半候选人?
java·后端·算法
小蒋观天下2 小时前
太阳能低功耗AI相机专项:AOV值守、唤醒时序、ISP启停时序BUG
深度学习·数码相机·算法·机器学习