• 归并排序


    归并排序

    归并排序介绍:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)

     /**
         * 分解
         *
         * @param arr   数组
         * @param left  左边起点
         * @param right 右边终点
         * @param temp  转换数组
         */
        public static void mergeSort(int[] arr, int left, int right, int[] temp) {
            int mid = (left + right) / 2;
            if (left < right) {
                //左分
                mergeSort(arr, left, mid, temp);
                //右分
                mergeSort(arr, mid + 1, right, temp);
                //左右合并
                merge(arr, left, mid, right, temp);
    
            }
            //合并
    
        }
    
        /**
         * 合并
         *
         * @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 t = 0;//临时数组开始下标
            int leftIndex=left;//左边开始下标
            int midIndex=mid+1;//右边开始下标
            while (leftIndex <= mid&&midIndex<=right) {
                //两边进行比较 小的放入临时数组
                if (arr[leftIndex] <= arr[midIndex]) {
                    temp[t] = arr[leftIndex];
                    t++;
                    leftIndex++;
                } else {
                    temp[t] = arr[midIndex];
                    t++;
                    midIndex++;
                }
            }
            //右边全部比较完毕左边有剩余
            while (leftIndex<=mid){
                temp[t] = arr[leftIndex];
                t++;
                leftIndex++;
            }
            //左边全部比较完毕右边有剩余
            while (midIndex<=right){
                temp[t] = arr[midIndex];
                t++;
                midIndex++;
            }
    
            //全部比较完毕 从临时数组放入到arr中
            t=0;
            for (int i=left;i<=right;i++){
                arr[i]=temp[t++];
            }
    
    
        }
    
    
  • 相关阅读:
    vue插件编写与开发
    http状态码解读
    JavaScript 在HTML中的加载顺序
    vue props的理解
    vue项目中使用scss
    [LeetCode] 57. 插入区间
    [LeetCode] 55. 跳跃游戏
    [LeetCode] 56. 合并区间
    [LeetCode] 54. 螺旋矩阵
    [LeetCode] 53. 最大子序和
  • 原文地址:https://www.cnblogs.com/huangshen/p/13339598.html
Copyright © 2020-2023  润新知