#include <iostream> #include <string> #include <vector> #include <utility> #include <iterator> #include <algorithm> #include <deque> #include <cmath> #include <stack> #include <queue> #define endl "\n" #define ll long long #define all(v) v.begin(),v.end() void merge(int array[], int const left, int const mid, int const right) { auto const subArrayOne = mid - left + 1; auto const subArrayTwo = right - mid; // Create temp arrays auto *leftArray = new int[subArrayOne], *rightArray = new int[subArrayTwo]; // Copy data to temp arrays leftArray[] // and rightArray[] for (auto i = 0; i < subArrayOne; i++) leftArray[i] = array[left + i]; for (auto j = 0; j < subArrayTwo; j++) rightArray[j] = array[mid + 1 + j]; // Initial index of first sub-array // Initial index of second sub-array auto indexOfSubArrayOne = 0, indexOfSubArrayTwo = 0; // Initial index of merged array int indexOfMergedArray = left; // Merge the temp arrays back into // array[left..right] while (indexOfSubArrayOne < subArrayOne && indexOfSubArrayTwo < subArrayTwo) { if (leftArray[indexOfSubArrayOne] <= rightArray[indexOfSubArrayTwo]) { array[indexOfMergedArray] = leftArray[indexOfSubArrayOne]; indexOfSubArrayOne++; } else { array[indexOfMergedArray] = rightArray[indexOfSubArrayTwo]; indexOfSubArrayTwo++; } indexOfMergedArray++; } // Copy the remaining elements of // left[], if there are any while (indexOfSubArrayOne < subArrayOne) { array[indexOfMergedArray] = leftArray[indexOfSubArrayOne]; indexOfSubArrayOne++; indexOfMergedArray++; } // Copy the remaining elements of // right[], if there are any while (indexOfSubArrayTwo < subArrayTwo) { array[indexOfMergedArray] = rightArray[indexOfSubArrayTwo]; indexOfSubArrayTwo++; indexOfMergedArray++; } } // begin is for left index and end is // right index of the sub-array // of arr to be sorted */ void mergeSort(int array[], int const begin, int const end) { // Returns recursively if (begin >= end) return; auto mid = begin + (end - begin) / 2; mergeSort(array, begin, mid); mergeSort(array, mid + 1, end); merge(array, begin, mid, end); } using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll N ; cin>>N ; int X[N] ; for(ll i=0;i<N;i++){ cin>>X[i];} mergeSort(X,0,N-1) ; for(ll i=0;i<N;i++){ cout<<X[i]<<" ";} }