归并排序(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)(需要临时数组)
稳定性 ✅ 稳定

四、记忆口诀

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


五、一句话记住

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

相关推荐
小科先生1 分钟前
初学者安装java
java·开发语言
地平线开发者2 分钟前
工具链使用从入门到顺手
算法
明航咨询—张老师11 分钟前
AI工具狂飙时代:三款实用AI产品深度横向测评
大数据·人工智能·算法·it
wyhwust16 分钟前
如何让maven帮我们去下载合适的包
java·maven
ID_1800790547321 分钟前
小红书笔记评论 API 接口深度解析(带全套 JSON 示例・技术实战版)
java·开发语言·windows
逍遥德24 分钟前
Java编程高频的“技术点”-03:“下划线命名”参数,后端用“驼峰命名“接收
java·后端·springboot
jiayong2324 分钟前
Maven clean 报错与 Maven Profile 机制总结
java·maven
qq_3660862237 分钟前
测试接口传参数时,放在Header和Body中后台接收参数的区别
java·开发语言·前端
Jun62640 分钟前
QT(8)-线程锁
java·开发语言
biubiubiu070641 分钟前
SpringBoot 3.5.4 整合Quartz 定时任务
java·spring boot·spring