• [原创]二路归并排序针对数组的场景(C++版)


    //二路归并排序时间复杂度ON*log2N空间复杂度O(n)  稳定的

    int n = 10;

    int* B = (int*)malloc((n + 1)*sizeof(int));

    void merge(int A[], int low, int mid, int high){

             int i, j, k;

             for (k = low; k <= high; k++)

                       B[k] = A[k];

             for (i = low, j = mid + 1, k = i; i <= mid&&j <= high;k++){

                       if (B[i] <= B[j])

                                A[k] = B[i++];

                       else

                                A[k] = B[j++];

             }

             while (i <= mid) A[k++] = B[i++];

             while (j <= high) A[k++] = B[j++];   

    }

    void mergeSort(int A[],int low,int high){

             if (low < high){

                       int mid = (low + high) / 2;

                       mergeSort(A,low,mid);

                       mergeSort(A,mid+1,high);

                       merge(A, low, mid, high);

             }

    }

      这是该算法的经典运用场景,数据结构使用的是数组。

      另外该算法还有另外一种应用场景,也就是针对单向链表的场景,这种场景下,时间复杂度没变,但空间复杂度为O(1),也就是空间复杂度降低了,

    该场景在我原创的另外一篇博文中有介绍。

      目前该算法的数组场景,我只用C++实现了,后面有空会写出相应java实现。

  • 相关阅读:
    log4j2配置文件log4j2.xml
    Log4J2的 PatternLayout
    jvm gc日志解读
    2018.10.9 logstash启动慢的问题解决
    阿花宝宝 Java基础笔记 之 引用类型作为参数
    阿花宝宝 Java基础笔记 之 带参方法
    阿花宝宝 Java基础笔记 之
    阿花宝宝 Java基础笔记 之 类和对象
    阿花宝宝 Java基础笔记 之 流程控制(二)
    阿花宝宝 Java基础笔记 之 流程控制(一)
  • 原文地址:https://www.cnblogs.com/lordcheng/p/7326373.html
Copyright © 2020-2023  润新知