zoukankan      html  css  js  c++  java
  • STL:原地归并排序模板(InplaceMergeSort)

    原理:就是在归并排序上改进,以时间复杂度换空间复杂度,利用元素反转完成排序

    具体过程如下:

    具体操作看代码吧,应该没什么难度,主要是reverse要反转三次

     1 typedef int Position;
     2 
     3 void Merge_Sort(Position, Position, int *const, Position *);
     4 void Merge(Position, Position, int *const, Position *);
     5 void Convert(Position, Position, Position, Position *);
     6 void Reverse(Position, Position, Position *);
     7 void Swap(Position *, Position, Position);
     8 
     9 void Merge_Sort(Position Left, Position Right, int *const Inverse_Num, Position *A)
    10 {
    11     if (Left < Right)
    12     {
    13         Position Mid = (Left + Right) / 2;
    14         Merge_Sort(Left, Mid, Inverse_Num,A);
    15         Merge_Sort(Mid + 1, Right, Inverse_Num,A);
    16         Merge(Left, Right, Inverse_Num, A);
    17     }
    18 }
    19 
    20 void Merge(Position Left, Position Right, int *const Inverse_Num, Position *A)
    21 {
    22     Position Mid = (Left + Right) / 2, lpos = Left, rpos = Mid + 1, pos = Left, index = rpos;
    23 
    24     while (lpos <= Mid && rpos <= Right)
    25     {
    26         while (lpos < rpos && A[lpos] <= A[rpos])
    27             lpos++;
    28         index = rpos;
    29         while (rpos <= Right && A[rpos] < A[lpos])
    30             rpos++;
    31         Convert(lpos, index - 1, rpos - 1, A);
    32         lpos += rpos - index;
    33     }
    34 }
    35 
    36 void Convert(Position Left, Position Mid, Position Right, Position *A)
    37 {
    38     Reverse(Left, Mid, A);
    39     Reverse(Mid + 1, Right, A);
    40     Reverse(Left, Right, A);
    41 }
    42 
    43 void Reverse(Position Left, Position Right, Position *A)
    44 {
    45     Position i = Left, j = Right;
    46     while (i < j)
    47         Swap(A, i++, j--);
    48 }
    49 
    50 void Swap(Position *A, Position i, Position j)
    51 {
    52     A[i] ^= A[j];
    53     A[j] ^= A[i];
    54     A[i] ^= A[j];
    55 }

     参考:http://blog.csdn.net/acdreamers/article/details/24244643

  • 相关阅读:
    Cheatsheet: 2012 03.23 ~ 03.31
    Cheatsheet: 2012 04.13 ~ 04.24
    Cheatsheet: 2012 02.09 ~ 02.29
    Cheatsheet: 2012 03.01 ~ 03.12
    Cheatsheet: 2012 03.13 ~ 03.22
    Cheatsheet: 2012 01.20 ~ 01.31
    Cheatsheet: 2012 04.01 ~ 04.12
    Cheatsheet: 2012 04.25 ~ 05.03
    Cheatsheet: 2012 01.10 ~ 01.19
    1.30
  • 原文地址:https://www.cnblogs.com/Philip-Tell-Truth/p/5006910.html
Copyright © 2011-2022 走看看