我叫:归并排序【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));
相关推荐
星尘库2 分钟前
怎么实现js混淆加密 每隔一段时间 会失效 需要重新加密使用
java·服务器·前端
Brduino脑机接口技术答疑3 分钟前
脑机接口数据处理连载(二) 数据源头解析:脑电信号的采集原理与数据特性
人工智能·python·算法·数据分析·脑机接口
白露与泡影3 分钟前
Java面试题2025最新、最全、最细(附答案)
java·开发语言
D***y2018 分钟前
SpringCloud篇(配置中心 - Nacos)
java·spring·spring cloud
吃着火锅x唱着歌9 分钟前
LeetCode 1010.总持续时间可被60整除的歌曲
算法·leetcode·职场和发展
风筝在晴天搁浅9 分钟前
代码随想录 198.打家劫舍
算法
weixin_5150397913 分钟前
互联网大厂面试:程序员二狗的搞笑经历
java·学习·面试·程序员·互联网·技术·故事
py有趣16 分钟前
LeetCode算法学习之旋转矩阵
学习·算法·leetcode
三花聚顶<>17 分钟前
310.力扣LeetCode_ 最小高度树_三种方法总结
算法·leetcode·职场和发展