Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- void copyArray(long* &A, int begin, int end, long* &B)
- {
- for(int i = begin; i < end; i++)
- B[i] = A[i];
- }
- void merge(long* &A, int begin, int mid, int end, long* &B)
- {
- int i = begin, j = mid;
- for(int k = begin; k < end; k++)
- {
- if (i < mid && (j >= end || A[i] <= A[j]))
- B[k] = A[i++];
- else
- B[k] = A[j++];
- }
- }
- void splitMerge(long* &B, int begin, int end, long* &A)
- {
- if(end - begin < 2) return;
- int mid = (end + begin) / 2;
- splitMerge(A, begin, mid, B);
- splitMerge(A, mid, end, B);
- merge(B, begin, mid, end, A);
- }
- void mergeSort(long* &A, long* &B, int n)
- {
- copyArray(A, 0, n, B);
- splitMerge(B, 0, n, A);
- }
- int main()
- {
- int n;
- cin >> n;
- long* tab = new long[n];
- long* tmpTab = new long[n];
- for (int i = 0; i < n; i++)
- cin >> tab[i];
- mergeSort(tab, tmpTab, n);
- for (int i = 0; i < n; i++)
- cout << tab[i] << endl;
- delete[] tab;
- delete[] tmpTab;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement