归并排序(Java)

一、一句话总结

分治:先分成两半分别排序,再合并两个有序数组


二、核心代码

java 复制代码
public void mergeSort(int[] arr, int left, int right) {
    if (left >= right) return;
    
    int mid = (left + right) / 2;
    mergeSort(arr, left, mid);      // 排左边
    mergeSort(arr, mid + 1, right); // 排右边
    merge(arr, left, mid, right);   // 合并
}

private void merge(int[] arr, int left, int mid, int right) {
    int[] temp = new int[right - left + 1];
    int i = left, j = mid + 1, k = 0;
    
    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j]) temp[k++] = arr[i++];
        else temp[k++] = arr[j++];
    }
    while (i <= mid) temp[k++] = arr[i++];
    while (j <= right) temp[k++] = arr[j++];
    
    for (int t = 0; t < temp.length; t++) {
        arr[left + t] = temp[t];
    }
}

三、复杂度

指标
时间复杂度 O(n log n)(最好/最坏/平均都一样)
空间复杂度 O(n)(需要临时数组)
稳定性 ✅ 稳定

四、记忆口诀

左边排,右边排,两个有序合并来
临时数组存结果,最后拷贝回原数组


五、一句话记住

归并排序 = 分治 + 合并,稳定但费空间

相关推荐
captain3767 小时前
网络原理(9)-数据链路层
java·网络协议·java-ee
liliangcsdn7 小时前
IVOL与偏度因子的对比测量分析
算法
惊讶的猫8 小时前
意图识别置信度和检索重排的分数
java
caoerzhong8 小时前
仓库管理数字化趋势解读:JeeWMS 开源 Java WMS 视角下的五个演进方向
java·开源
程序员JerrySUN8 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
threerocks9 小时前
Jev 入门第一课
算法
Joy T9 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
估值探索者9 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
西柚研究生1234569 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测
天若有情67310 小时前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++