我叫:归并排序【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));
相关推荐
白鲸开源3 分钟前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole11 分钟前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫36 分钟前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide1 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户3721574261351 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源1 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
CoovallyAIHub2 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
Java中文社群2 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心2 小时前
从零开始学Flink:数据源
java·大数据·后端·flink
间彧2 小时前
Spring Boot项目中如何自定义线程池
java