• 算法笔记--排序算法-分治法-归并排序


    归并排序

    时间复杂度

    每一层的和都是 cn,共有 lgn+1 层,因此总的执行时间是 cnlgn + cn,相比 nlgn 来说,cn 项可以忽略,因此 T(n) 的上界是 Θ(nlgn)。

    注:

    设有 n 个叶子结点,满二叉树的层数为 k,有 2k-1=n,即 k-1=log2n,所以 k=lgn +1。就是说共有 lgn + 1 层

    设每个叶子结点的执行时间是 c,则每一层的执行时间是 cn。

    所以总执行时间是 cn ( lgn + 1 ) = cnlgn + cn。

    Java代码

     1 public class MergeSort {
     2     
     3     public void sort(int a[], int s, int e) {
     4         if (s < e && s >= 0 && e < a.length) {
     5             int i = (s + e) / 2;
     6             sort(a, s, i); //左半边数组递归
     7             sort(a, i + 1, e); //右半边数组递归
     8             compareSort(a, s, e); //具体的计算方法
     9         }
    10     }
    11 
    12     private void compareSort(int[] a, int s, int e) {
    13         if (s >= 0 && e < a.length && e > s) {
    14             int m = (s + e) / 2 + 1;  //中间位置
    15             int start = s;
    16             int mid = m;            
    17             int[] temp = new int[e - s + 1];
    18             int index = 0;
    19             
    20             //将数组劈成两半,以两边数组的左边第一个索引指向的数字开始互相比较,较小数的存入temp数组,索引+1
    21             while (start < m && mid <= e) {
    22                 if (a[start] <= a[mid]) {
    23                     temp[index] = a[start];
    24                     start++;
    25                 } else {
    26                     temp[index] = a[mid];
    27                     mid++;
    28                 }
    29                 index++;
    30             }
    31             
    32             //把没比较完的数按顺序写到temp数组中
    33             if (index < temp.length) {
    34                 if (start < m)
    35                     for (int i = start; i < m; i++) {
    36                         temp[index++] = a[i];
    37                     }
    38                 else if (mid <= e)
    39                     for (int i = mid; i <= e; i++) {
    40                         temp[index++] = a[i];
    41                     }
    42             }
    43             for (int i = 0; i <= index; i++) {
    44                 if (s + i <= e) {
    45                     a[s + i] = temp[i];
    46                 }
    47             }
    48         }
    49     }
    50 }
  • 相关阅读:
    生成随机数
    ES集群开启X-pack认证
    部署ceph
    分布式存储ceph理论
    kvm虚拟机迁移
    kvm虚拟机网络管理
    kvm虚拟机存储管理
    机电传动控制个人课程报告
    第11周机电传动控制作业
    补充第九周手工画图
  • 原文地址:https://www.cnblogs.com/femaleprogramer/p/3758831.html
Copyright © 2020-2023  润新知