#include #include using namespace std; int n, a[1000001]; int a1[500001], a2[500001]; void in() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); } void mergeSortedParts(int l, int m, int r) { for (int i = l; i < m; i++) a1[i - l] = a[i]; for (int i = m; i < r; i++) a2[i - m] = a[i]; int ind1 = 0, ind2 = 0; for (int i = l; i < r; i++) { if (ind1 >= m - l && ind2 < r - m) a[i] = a2[ind2++]; else if (ind2 >= r - m && ind1 < m - l) a[i] = a1[ind1++]; else { if (a1[ind1] <= a2[ind2]) a[i] = a1[ind1++]; else a[i] = a2[ind2++]; } } } void mergeSort(int l, int r) { if (r - l <= 1) return; mergeSort(l, l + (r - l) / 2); mergeSort(l + (r - l) / 2, r); mergeSortedParts(l, l + (r - l) / 2, r); } void print() { for (int i = 0; i < n - 1; i++) printf("%d ", a[i]); printf("%d\n", a[n - 1]); } int main() { in(); mergeSort(0, n); print(); return 0; }