• 【排序】归并排序+逆序对应用


     1 void merge_sort(int *A, int x, int y, int *T)
     2 {//x为左端点,y为右端点
     3     //
     4     if(y-x<=1)  return ;
     5     int m = x + (y-x)/2;//划分
     6     int p = x, q = m, i = x;
     7     //递归
     8     merge_sort(A, x, m, T);
     9     merge_sort(A, m, y, T);
    10     //归并
    11     while(p < m || q < y)//只要有一个序列非空,就继续排序
    12     {
    13         if((q >= y) || (p < m && A[p] <= A[q]))
    14         {//若 第二个序列为空(第一个必非空)|| 两个均非空且A[p] <= A[q]时,将左半数组元素复制到临时空间
    15             T[i++] = A[p++];
    16         }
    17         else
    18         {//否则 第二个序列非空 && (p >= m || A[p] > A[q]时,将右半数组元素复制到临时空间
    19             T[i++] = A[q++];
    20             //cnt += m-p;
    21         }
    22     }
    23     for(int i = x; i < y; i++)  {A[i] = T[i];}
    24 }

    逆序对应用:

    由于合并操作时从小到大进行的,当右边的A[j]复制到T中时,左边还没来得及复制到T中的数就是所有左边比A[j]大的数。此时只要在累加器中计入左边元素个数m-p即可。(左边所剩元素在[m, p)区间内)

     1 void merge_sort(int *A, int x, int y, int *T)
     2 {//x为左端点,y为右端点
     3     //
     4     if(y-x<=1)  return ;
     5     int m = x + (y-x)/2;//划分
     6     int p = x, q = m, i = x;
     7     //递归
     8     merge_sort(A, x, m, T);
     9     merge_sort(A, m, y, T);
    10     //归并
    11     while(p < m || q < y)//只要有一个序列非空,就继续排序
    12     {
    13         if((q >= y) || (p < m && A[p] <= A[q]))
    14         {//若 第二个序列为空(第一个必非空)|| 两个均非空且A[p] <= A[q]时,将左半数组元素复制到临时空间
    15             T[i++] = A[p++];
    16         }
    17         else
    18         {//否则 第二个序列非空 && (p >= m || A[p] > A[q])时,将右半数组元素复制到临时空间
    19             T[i++] = A[q++];
    20             cnt += m-p; //计数
    21         }
    22     }
    23     for(int i = x; i < y; i++)  {A[i] = T[i];}
    24 }
    View Code
  • 相关阅读:
    [bzoj4131]并行博弈_博弈论
    [bzoj1874][BeiJing2009 WinterCamp]取石子游戏_博弈论
    [bzoj4281][ONTAK2015]Związek Harcerstwa Bajtockiego_倍增LCA
    [bzoj2091][Poi2010]The Minima Game_动态规划
    [bzoj1578][Usaco2009 Feb]Stock Market 股票市场_完全背包dp
    常用正则表达式
    webSQL的基本操作
    《css3揭秘》的效果code
    笛卡尔积算法的sku
    仿制淘宝sku点击效果
  • 原文地址:https://www.cnblogs.com/LLGemini/p/4121960.html
Copyright © 2020-2023  润新知