Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int min(int a, int b)
- {
- return (a < b ? a : b);
- }
- int* cpy(int* B, int* Arr, int left, int right, int& k)
- {
- for(int i = left; i <= right; i++)
- {
- B[k] = Arr[i];
- k++;
- }
- return B;
- }
- void MergeSort(int*& Arr, int n, int deg)
- {
- int* B = new int[n];
- int i = 0;
- int j = deg;
- int k = 0;
- int p = j;
- int q = min(n - j, p);
- int l = 0;
- int r = 0;
- while (j < n)
- {
- l = r + p;
- r = l + q;
- while (i < l && j < r)
- {
- if (Arr[i] < Arr[j])
- {
- B[k] = Arr[i];
- i++;
- }
- else
- {
- B[k] = Arr[j];
- j++;
- }
- k++;
- }
- if (i == l)
- B = cpy(B, Arr, j, r - 1, k);
- else
- B = cpy(B, Arr, i, l - 1, k);
- i = r;
- j = r + p;
- q = min(n - j, p);
- }
- if (i < n)
- B = cpy(B, Arr, i, n - 1, k);
- for (int i = 0; i < n; i++)
- Arr[i] = B[i];
- delete[]B;
- }
- int* Merge(int* Arr, int n, int size)
- {
- for (int i = n; i < size; i += n)
- MergeSort(Arr, size, i);
- return Arr;
- }
- int main()
- {
- int k, n;
- cin >> k >> n;
- int** arr = new int*[k];
- for (int i = 0; i < k; i++)
- arr[i] = new int[n];
- for (int i = 0; i < k; i++)
- for (int j = 0; j < n; j++)
- cin >> arr[i][j];
- int* B = new int[n*k];
- int s = 0;
- for (int i = 0; i < k; i++)
- for (int j = 0; j < n; j++)
- {
- B[s] = arr[i][j];
- s++;
- }
- for (int i = 0; i < n*k; i++)
- cout << B[i] << ' ';
- cout << endl;
- B = Merge(B, n, n*k);
- for (int i = 0; i < n*k; i++)
- cout << B[i] << ' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement