zoukankan      html  css  js  c++  java
  • 排序算法一归并排序

    复杂度

    平均时间复杂度: O( n log n)

    空间复杂度: O(n)

    稳定性:稳定

    基本思想

    将一个整体的数组被分解成以数组中单一元素为基本单位的多区域集合,

    此时,在每个单一区域中设置两个引用(左引用L与右引用R),利用两个引用,使得每个单一数组中的元素变为有序。

    最后执行merge方法(融合),使得左右两边有序的两个单一区域进行合并,合并的过程是简单的递推过程。

     1 public static void mergeSort(int[] arr, int begin, int end) {
     2         int len = arr.length;
     3         int mid = (begin + end) / 2;
     4         if (begin < end) {
     5             //
     6             mergeSort(arr, begin, mid);//左边有序
     7             mergeSort(arr, mid + 1, end);//右边有序
     8             //
     9             merge(arr, begin, mid, end);
    10         }
    11     }
    12 
    13     private static void merge(int[] arr, int begin, int mid, int end) {
    14         //临时数组,储存排序后的数组片段
    15         int[] temp = new int[end - begin + 1];
    16         // i代表左边数组的第一个元素
    17         // j代表右边数组的第一个元素
    18         // k代表临时数组的角标
    19         int i = begin, j = mid + 1, k = 0;
    20 
    21         //将两个数组排序放入临时数组
    22         while (i <= mid && j <= end) {
    23             if (arr[i] < arr[j]) {
    24                 temp[k++] = arr[i++];
    25             } else {
    26                 temp[k++] = arr[j++];
    27             }
    28         }
    29         //如果左边为排完,右边排完
    30         while (i <= mid) temp[k++] = arr[i++];
    31         //如果右边为排完,左边排完
    32         while (j <= end) temp[k++] = arr[j++];
    33         for (int l = 0; l < temp.length; l++) {
    34             arr[begin++] = temp[l];
    35         }
    36     }
  • 相关阅读:
    osip状态机分析
    配置tomcat 加载指定的jar
    oracle创建用户并指定表空间
    CentOS7通过rsync+crontab实现两台服务器文件同步
    CentOS7配置MySQL5.7主备
    CentOS7本地安装MySQL5.7
    设置mysql 事务锁超时时间 innodb_lock_wait_timeout
    获取指定年月的第一天与最后一天
    Nginx 反向代理504 Gateway Time-out
    ubuntu下安装配置apache2与php
  • 原文地址:https://www.cnblogs.com/loveer/p/11265865.html
Copyright © 2011-2022 走看看