我叫:归并排序【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));
相关推荐
weixin_460443566 分钟前
Java+Linux私有化训考平台:服务、数据库与终端部署结构解析
java·linux·数据库·私有化部署·企业培训考试系统·企业考试系统
糖果豆豆8 分钟前
让 AI 自查三遍,它只会把错的说得更像对的——检查的人和被检查的,是同一个
算法·架构
云和数据.ChenGuang10 分钟前
python大小整数范围解析
java·开发语言·python
Java内核笔记22 分钟前
Spring AI 生产级 Chat 接口:6 个开关、13 个坑,其中 2 个开关根本没生效
java·人工智能·后端
雷一言说24 分钟前
Spring AI 2.0 RAG:用 Metadata Filter 做多租户检索隔离
java·spring
WeiXin_DZbishe42 分钟前
基于springboot装修风格选择系统的设计与开发-计算机毕设【课程设计】77964
java·vue.js·spring boot·后端·python·php·课程设计
XZ-0700011 小时前
week9-三元表达式
java·前端·python
云和数据.ChenGuang1 小时前
name=“张三“ age=18 weight=100.3 print (name,age,weight)
java·服务器·前端
Yeswater1 小时前
从 NIO 到 Netty:五个坑,和一张把它填平的基础设施网
java·后端·netty
denlaku1 小时前
JDK 15 新特性详解
java·开发语言