Advertisement
meta1211

nothing

Sep 18th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. void Swap(int *xp, int *yp)
  2. {
  3.     int temp = *xp;
  4.     *xp = *yp;
  5.     *yp = temp;
  6. }
  7.  
  8. void ShellSort(int *a, int n)
  9. {
  10.     int i;
  11.     int value;
  12.     for (int p = n / 2; p >= 0; p--)
  13.     {
  14.         for (int q = 0; q < p; q++)
  15.         {
  16.             for (int j = q + p; j < n; j += p)
  17.             {
  18.                 for (i = j - p, value = a[j]; i >= 0 && a[i] > value; i -= p)
  19.                 {
  20.                     a[i + p] = a[i];
  21.                 }
  22.                 a[i + p] = value;
  23.             }
  24.         }
  25.     }
  26. }
  27.  
  28. void MoveElement(int *a, int n, int index)
  29. {
  30.     int j = 2 * index + 1;
  31.     if (j > n)
  32.         return;
  33.     int value = a[index];
  34.     int i = index;
  35.     if (a[j + 1] > a[j] && j + 1 < n)
  36.     {
  37.         j++;
  38.     }
  39.     while (a[j] > value)
  40.     {
  41.         a[i] = a[j];
  42.         i = j;
  43.         j = 2 * i + 1;
  44.         if (j >= n)
  45.         {
  46.             break;
  47.         }
  48.         if (j + 1 < n && a[j + 1] > a[j])
  49.         {
  50.             j++;
  51.         }
  52.     }
  53.     a[i] = value;
  54. }
  55.  
  56. void BuildPyramid(int *a, int n)
  57. {
  58.     for (int curentIndex = n / 2 - 1; curentIndex >= 0; curentIndex--)
  59.     {
  60.         MoveElement(a, n, curentIndex);
  61.     }
  62. }
  63.  
  64. void PyramidSort(int *a, int n)
  65. {
  66.     BuildPyramid(a, n);
  67.     for (int N = n; N > 0; )
  68.     {
  69.         Swap(&a[0], &a[N - 1]);
  70.         N--;
  71.         MoveElement(a, N, 0);
  72.         //BuildPyramid(a, N);
  73.     }
  74.     Swap(&a[0], &a[1]);
  75. }
  76.  
  77. void BubbleSort(int *a, int n, int start, int end)
  78. {
  79.     int i, j;
  80.     bool isSwapped;
  81.     for (i = start; i < end - 1; i++)
  82.     {
  83.         isSwapped = false;
  84.         for (j = 0; j < n - i - 1; j++)
  85.         {
  86.             if (a[j] > a[j + 1])
  87.             {
  88.                 Swap(&a[j], &a[j + 1]);
  89.                 isSwapped = true;
  90.             }
  91.         }
  92.         if (isSwapped == false)
  93.             break;
  94.     }
  95. }
  96.  
  97. void QuickSort(int *a, int n, int start, int end)
  98. {
  99.     int i = start;
  100.     int j = end;
  101.     int pillar = a[(end + start) / 2];
  102.    
  103.     while(i < j)
  104.     {
  105.         for (; a[i] < pillar && i <= end; i++);
  106.         for (; a[j] > pillar && j >= start; j--);
  107.         if (i <= j)
  108.         {
  109.             Swap(&a[i], &a[j]);
  110.             i++;
  111.             j--;
  112.         }
  113.     }
  114.     if (start < j)
  115.     {
  116.         QuickSort(a, n, start, j);
  117.     }
  118.     if (end > i)
  119.     {
  120.         QuickSort(a, n, i, end);
  121.     }
  122. }
  123.  
  124. void PrintArray(int *a, int n, int mask)
  125. {
  126.     std::cout << "Mask: \n" << std::bitset<4>(mask) << "\n\n";
  127.     for (int i = 0; i < n; i++)
  128.     {
  129.         std::cout << std::bitset<4>( a[i]);
  130.         std::cout << '\n';
  131.     }
  132.     std::cout << '\n';
  133. }
  134.  
  135. void ByteSort(int *a, int n, int start, int end, int cmpByte)
  136. {
  137.     int i = start;
  138.     int j = end;
  139.     if (i <= j)
  140.     {
  141.         int mask = 1 << cmpByte;
  142.         if (mask <= 16)
  143.         {
  144.             PrintArray(a, n, mask);
  145.         }
  146.         while (i <= j)
  147.         {
  148.             for (; i < j && (a[i] & mask); i++);
  149.             for (; i < j && !(a[j] & mask); j--);
  150.             if (i <= j)
  151.             {
  152.                 std::cout << "Swap " << a[i] << " and " << a[j] << '\n';
  153.                 Swap(&a[i], &a[j]);
  154.                 i++;
  155.                 j--;
  156.             }
  157.         }
  158.         if (start < j)
  159.         {
  160.             ByteSort(a, n, start, j, cmpByte - 1);
  161.         }
  162.         if (i < end)
  163.         {
  164.             ByteSort(a, n, i, end, cmpByte - 1);
  165.         }
  166.     }
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement