归并排序(递归实现)

复制代码
public static void mergeSort1(int[] arr){
    if(arr ==null || arr.length <2){
        return;
    }

    process(arr, 0 , arr.length-1);
}

public static void process(int[] arr ,int L ,int R){
    if(L ==R){
        return;
    }
    int mid = L +((R-L)>>1);
    process(arr , L , mid);
    process(arr , mid+1 , R);
    merge(arr , L , mid ,R);
}

public static void merge(int[] arr , int L  , int M , int R){
    int[] help = new int[R-L+1];
    int i =0;
    int p1 = L;
    int p2 = M+1;
    while(p1 <= M && p2 <= R){
        help[i++] = arr[p1] <= arr[p2] ? arr[p1++] :arr[p2++];
    }

    while (p1 <= M){
        help[i++] = arr[p1++];;
    }
    while (p2 <= R){
        help[i++] = arr[p2++];;
    }
    for (i = 0; i < help.length; i++) {
        arr[L+i] = help[i];
    }
}
相关推荐
噢,我明白了38 分钟前
java中唯一键和幂等键的应用
java·后端
程序猿乐锅44 分钟前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
专注仿真1 小时前
ACM算法
算法·深度优先
考虑考虑1 小时前
synchronized字符串常量
java·后端·java ee
长谷深风1111 小时前
Tool与Skill:AI能力设计的分水岭
java·人工智能·ai·大模型·aiagent
m0_587383001 小时前
广州24小时自助健身房解决方案实战指南与系统部署要点
java·spring·小程序·架构·需求分析
Escalating_xu1 小时前
【C 语言】深入理解指针(1·下):指针运算、野指针、assert 与传址实战
java·c语言·开发语言
周杰偷奶茶2 小时前
【Java】数据类型与变量
java·开发语言
code斗2 小时前
Java数据结构:堆详解
java·开发语言·数据结构
重生之小比特2 小时前
【C++进阶】map和set
java·开发语言·c++