• 归并排序


    归并排序

    归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

    两路归并排序算法思路

    分而治之(divide - conquer);每个递归过程涉及三个步骤

    • 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素.
    • 治理: 对每个子序列分别调用归并排序MergeSort, 进行递归操作
    • 合并: 合并两个排好序的子序列,生成排序结果.

    代码实现

    分解

    public void sort(int[] arr) {
            int len = arr.length;   
            if (len <= 1) return;
            int[] temp = new int[len];
            sort(arr, 0, len - 1, temp);
        }
    
        public void sort(int[] arr, int left, int right, int[] temp) {
            if (left == right) return;
    
            int mid = (left + right) / 2;
            sort(arr, left, mid, temp);
            sort(arr, mid + 1, right, temp);
    
            if (arr[mid]<=arr[mid+1]) return;
    
            marge(arr, left,mid, right, temp);
    
        }
    

    合并

    public void marge(int[] arr, int left,int mid, int right, int[] temp){
            for (int i = left; i <= right ; i++) {
                temp[i] = arr[i];
            }
    
            int i = left;
            int j = mid + 1;
    
            for(int k = left; k <= right; k++){
                if (i == mid + 1){
                    arr[k] = temp[j];
                    j++;
                } else if(j == right + 1){
                    arr[k] = temp[i];
                    i++;
                }else if(temp[i] >= temp[j]) {
                    arr[k] = temp[j];
                    j++;
                } else{
                    arr[k] = temp[i];
                    i++;
                }
            }
        }
    
  • 相关阅读:
    上篇用到的matcher函数
    lambdaj学习
    Redis高级应用——2
    Redis入门
    从gitee 下载代码到本地
    CSS中对图片(background)的一些设置心得总结
    nodejs 安装Ionic 和cordova
    Spring MVC内容协商机制详解
    基于Servlet3.0的编程式SpringMVC实例详解
    基于Junit的Spring集成测试方法
  • 原文地址:https://www.cnblogs.com/ilyar1015/p/14683577.html
Copyright © 2020-2023  润新知