我叫:归并排序【JAVA】

1.认识我一下

  • 1.归并排序(MERGE-SORT)利用归并的思想实现的排序方法,该算法采用经典的分治策略
  • 2.分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。

2.分合思想

3 分久必合

java 复制代码
/**
     * 合并
     *
     * @param arr   原始数组
     * @param left  左边有序序列的初始索引
     * @param mid   中间索引
     * @param right 最右边那个索引
     * @param temp  中转数组
     */
    public static void merge(int[] arr, int left, int mid, int right, int[] temp) {
        int i = left;//初始化i,左边有序序列的初始索引
        int j = mid + 1;//初始化j,右边有序序列的初始索引
        int t = 0;//指向temp数组的当前索引

        //1.先把左右两边(已经有序)的数据,按照规则,填充到temp数组,直到又有两边有序序列有一方处理完毕为止
        while (i <= mid && j <= right) {
            //如果左边序列的当前元素小于或等于右边有序序列的当前元素,就把左边的填充到temp中
            if (arr[i] <= arr[j]) {
                temp[t] = arr[i];
                t++;
                i++;
            } else {//反之,将右边有序序列的当前元素拷贝到temp数组中
                temp[t] = arr[j];
                t++;
                j++;
            }
        }
        //2.把有剩余数据的一方,依次全部填充到temp数组中
        while (i <= mid) {//说明左边的元素还有剩余
            temp[t] = arr[i];
            t++;
            i++;
        }
        while (j <= right) {//说明右边有剩余
            temp[t] = arr[j];
            t++;
            j++;
        }
        //3.将temp数组的元素拷贝到arr
        //并不是每次都拷贝8个
        t = 0;
        int tempLeft = left;
        while (tempLeft <= right) {//第一次合并tempLeft=0,right=1
            arr[tempLeft] = temp[t];
            t++;
            tempLeft++;
        }
    }

4.分合一体

java 复制代码
 /**
     * 分+合
     *
     * @param arr
     * @param left
     * @param right
     * @param temp
     */
    public static void mergeSort(int[] arr, int left, int right, int[] temp) {
        if (left < right) {
            int mid = (left + right) / 2;//中间索引
            //向左递归进行分解
            mergeSort(arr, left, mid, temp);
            //向右递归进行分解
            mergeSort(arr, mid + 1, right, temp);

            //合并
            merge(arr, left, mid, right, temp);
        }
    }

5.测试一把

java 复制代码
        int[] arr = new int[]{8, 4, 5, 7, 1, 3, 6, 2};
        int[] temp = new int[arr.length];
        mergeSort(arr, 0, arr.length - 1, temp);
        System.out.println(Arrays.toString(arr));
相关推荐
heart000_19 分钟前
基于 WebWorker 的 WebAssembly 图像处理吞吐量分析
java·图像处理·wasm
菜鸟阿达12 分钟前
Idea 2025 commit 关闭侧边栏 开启探框
java·ide·intellij-idea
雨果talk15 分钟前
【一文看懂多模块Bean初始化难题】Spring Boot多模块项目中的Bean初始化难题:包名不一致的优雅解决方案
java·spring boot·后端·spring·springboot
xiaowu08032 分钟前
C# 中的Async 和 Await 的用法详解
java·开发语言·c#
范纹杉想快点毕业37 分钟前
初探Qt信号与槽机制
java·c语言·开发语言·c++·qt·visualstudio·visual studio
哈喽姥爷37 分钟前
苍穹外卖--缓存菜品Spring Cache
java·缓存·spring cache·苍穹外卖·黑马
Javis2111 小时前
代码随想录算法训练营第三十二天 |【动态规划1-13】
算法
程序员Xu1 小时前
【大厂机试题解法笔记】恢复数字序列
笔记·算法·深度优先
stein_java1 小时前
springMVC-13 文件下载及上传
java·spring
Cyanto1 小时前
Spring MVC 核心枢纽:DispatcherServlet 的深度解析与实践价值
java·spring·mvc