zoukankan      html  css  js  c++  java
  • 05-排序【归并排序】算法学习

    05-排序【归并排序】算法学习

    • 思想:运用递归思想,将原始数据分为两部分进行排序,然后合并已排序的子数组
    • 操作:比较
    • 是否稳定排序:
       
    • 是否原地排序:
       
    • 时间复杂度:O(nlogn)
       
    • 最好时间复杂度:O(nlogn)
       
    • 最坏时间复杂度:O(nlogn)
       
    • 平均时间复杂度:O(nlogn)
       
    • 空间复杂度:O(n)

           总结:归并排序运用递归算法、以及分治的思想,将大问题转换为其子问题,然后合并子解,最终求的结果的算法。

          实现代码(java)含义解释如下:

    1. int[] sort(int[] arr, int p, int q)方法:用于将数组arr内待排序的下标p至q的集合,分解为两个子数组,arr[p, r] 和 arr[r, q]。
         终止条件是,当数组内元素被分解至一个时,则该数组不可再分解,即返回该元素(该元素为已排序的最小子集)。
    2. int[] merge(int[] arr1, int[] arr2)方法:将两个有序数组合为一个有序数组集合。
         算法思想是:比较arr1的首元素(指针为i)和arr2的首元素(指针为j),将小的元素放入新数组中,此时将i或j向后移动一位,直至arr1或者arr2的指针指向null时,最后将arr1或者arr2的剩余元素依次插入到新数组后面,即完成排序。
        public static void main(String[] args) {
            int[] arr = new int[]{6, 5, 11, 3, 1, 7, 9, 4, 2, 8};
            int[] result = sort(arr, 0, arr.length);
            System.out.println(result);
        }
    
    
        public static int[] sort(int[] arr, int p, int q) {
            int r = (p+q)/2;
            if (p >= r) {
                return new int[]{arr[p]};
            }
            return merge(sort(arr, p, r), sort(arr, r, q));
        }
    
        public static int[] merge(int[] arr1, int[] arr2) {
            int[] newArr = new int[arr1.length + arr2.length];
            int k = 0;
            int i, j;
            for (i = 0, j = 0; i < arr1.length && j < arr2.length;) {
                if (arr1[i] < arr2[j]) {
                    newArr[k] = arr1[i];
                    i++;
                } else {
                    newArr[k] = arr2[j];
                    j++;
                }
                k++;
            }
    
            if (k < newArr.length && i == arr1.length) {
                for (; j < arr2.length; j++) {
                    newArr[k++] = arr2[j];
                }
            }
    
            if (k < newArr.length && j == arr2.length) {
                for (; i < arr1.length; i++) {
                    newArr[k++] = arr1[i];
                }
            }
    
            return newArr;
        }
    ____________________________特此,勉励____________________________
    本文作者cheng2839
    本文链接https://www.cnblogs.com/cheng2839
    关于博主:评论和私信会在第一时间回复。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
  • 相关阅读:
    编程心得
    关于百分比的小花招
    vue2.0实现银行卡类型种类的选择
    如何运行vue项目(维护他人的项目)
    手把手教你用vue-cli构建一个简单的路由应用
    解决eclipse端口被占用的问题
    echarts统计图踩坑合集
    echarts如何设置背景图的颜色
    小程序获取的用户头像怎么做成圆形
    vue踩坑记-在项目中安装依赖模块npm install报错
  • 原文地址:https://www.cnblogs.com/cheng2839/p/14507458.html
Copyright © 2011-2022 走看看