Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. void copyArray(long* &A, int begin, int end, long* &B)
  6. {
  7.     for(int i = begin; i < end; i++)
  8.         B[i] = A[i];
  9. }
  10.  
  11. void merge(long* &A, int begin, int mid, int end, long* &B)
  12. {
  13.     int i = begin, j = mid;
  14.  
  15.     for(int k = begin; k < end; k++)
  16.     {
  17.         if (i < mid && (j >= end || A[i] <= A[j]))
  18.             B[k] = A[i++];
  19.         else
  20.             B[k] = A[j++];
  21.     }
  22. }
  23.  
  24. void splitMerge(long* &B, int begin, int end, long* &A)
  25. {
  26.     if(end - begin < 2) return;
  27.    
  28.     int mid = (end + begin) / 2;
  29.     splitMerge(A, begin, mid, B);
  30.     splitMerge(A, mid, end, B);
  31.  
  32.     merge(B, begin, mid, end, A);
  33. }
  34.  
  35. void mergeSort(long* &A, long* &B, int n)
  36. {
  37.     copyArray(A, 0, n, B);
  38.     splitMerge(B, 0, n, A);
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44.     int n;
  45.     cin >> n;
  46.     long* tab = new long[n];
  47.     long* tmpTab = new long[n];
  48.     for (int i = 0; i < n; i++)
  49.             cin >> tab[i];
  50.  
  51.     mergeSort(tab, tmpTab, n);
  52.  
  53.     for (int i = 0; i < n; i++)
  54.         cout << tab[i] << endl;
  55.  
  56.     delete[] tab;
  57.     delete[] tmpTab;
  58.  
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement