Advertisement
Proff_Ust

merge_sort

Nov 10th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int min(int a, int b)
  5. {
  6.     return (a < b ? a : b);
  7. }
  8.  
  9. int* cpy(int* B, int* Arr, int left, int right, int& k)
  10. {
  11.     for(int i = left; i <= right; i++)
  12.     {
  13.         B[k] = Arr[i];
  14.         k++;
  15.     }
  16.     return B;
  17. }
  18.  
  19. void MergeSort(int*& Arr, int n, int deg)
  20. {
  21.     int* B = new int[n];
  22.     int i = 0;
  23.     int j = deg;
  24.     int k = 0;
  25.     int p = j;
  26.     int q = min(n - j, p);
  27.     int l = 0;
  28.     int r = 0;
  29.  
  30.  
  31.     while (j < n)
  32.     {
  33.         l = r + p;
  34.         r = l + q;
  35.         while (i < l && j < r)
  36.         {
  37.             if (Arr[i] < Arr[j])
  38.             {
  39.                 B[k] = Arr[i];
  40.                 i++;
  41.             }
  42.             else
  43.             {
  44.                 B[k] = Arr[j];
  45.                 j++;
  46.             }
  47.             k++;
  48.         }
  49.         if (i == l)
  50.             B = cpy(B, Arr, j, r - 1, k);
  51.         else
  52.             B = cpy(B, Arr, i, l - 1, k);
  53.         i = r;
  54.         j = r + p;
  55.         q = min(n - j, p);
  56.     }
  57.  
  58.     if (i < n)
  59.         B = cpy(B, Arr, i, n - 1, k);
  60.  
  61.     for (int i = 0; i < n; i++)
  62.         Arr[i] = B[i];
  63.     delete[]B;
  64. }
  65.  
  66. int* Merge(int* Arr, int n, int size)
  67. {
  68.     for (int i = n; i < size; i += n)
  69.         MergeSort(Arr, size, i);
  70.     return Arr;
  71. }
  72.  
  73. int main()
  74. {
  75.     int k, n;
  76.     cin >> k >> n;
  77.  
  78.     int** arr = new int*[k];
  79.     for (int i = 0; i < k; i++)
  80.         arr[i] = new int[n];
  81.     for (int i = 0; i < k; i++)
  82.         for (int j = 0; j < n; j++)
  83.             cin >> arr[i][j];
  84.  
  85.     int* B = new int[n*k];
  86.     int s = 0;
  87.  
  88.     for (int i = 0; i < k; i++)
  89.         for (int j = 0; j < n; j++)
  90.         {
  91.             B[s] = arr[i][j];
  92.             s++;
  93.         }
  94.  
  95.     for (int i = 0; i < n*k; i++)
  96.         cout << B[i] << ' ';
  97.     cout << endl;
  98.  
  99.     B = Merge(B, n, n*k);
  100.     for (int i = 0; i < n*k; i++)
  101.         cout << B[i] << ' ';
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement