zoukankan      html  css  js  c++  java
  • [原创]二路归并排序针对数组的场景(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实现。

  • 相关阅读:
    Visifire Chart控件设置 柱状图 条的宽窄
    silverlight+wcf 获得web参数
    Maven教程(转载)
    Eclipse插件CheckStyle的安装和使用
    log4net面面观之工作原理
    javabean实体类对象转为Map类型对象的方法(转发)
    ORACLE数据库创建用户名和表空间
    ORACLE 12C PDB 维护基础介绍
    int 与 Integer--话说数组转集合
    Shiro--权限控制
  • 原文地址:https://www.cnblogs.com/lordcheng/p/7326373.html
Copyright © 2011-2022 走看看