归并排序

归并排序采用的是分治的思想

将数组对半,再对半,再对半,再对半。。。直到最后的每一个数都成单独的一块(这里就是递归了,左半边递归,右半边递归)

再将拆开后的数组合并,合并是有序的合并,升序为例,则小的在前,大的在后。

最终得到的数组就是有序的数组

复制代码
//这是一个归并排序,拆分加合并的方法
    public static int[] mergeSort(int [] array, int start, int end){
        if(start < end){
            //向左侧拆分递归
            int mid = (start + end) / 2;
            mergeSort(array,start,mid);
            mergeSort(array,mid+1,end);

            //归并,调用下面写的方法
            merge(array,start,mid,end);
        }
        return array;
    }

    public static void merge(int [] array, int left , int mid ,int right){
        int [] temp = new int [array.length];
        int start1 = left;//这是左边的指针,就是开始的指针
        int start2 = mid + 1;
        int t = left;//

        //第一步:按照左右两个半边进行合并,指针遍历小的就放进辅助数组temp中,直到有一边的数据以及全部放完
        while(start1 <= mid && start2<=right){
            if(array[start1]<=array[start2])
                temp[t++]=array[start1++];
            else
                temp[t++]=array[start2++];
        }

        //第二步:将左边或者右边没有填充完的数据直接添加到temp辅助数组中
        while (start1 <= mid){
            temp[t++] = array[start1++];
        }
        while (start2 <= right){
            temp[t++] = array[start2++];
        }

        //第三步:将temp数组复制到array数组中
        for (int i = left; i <=right; i++) {
            array[i] = temp[i];
        }
    }
复制代码

 

posted @   _未知的暖意  阅读(124)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示