#include <cstdio> #include <cstdlib> #include <stack> #include <algorithm> using namespace std; const int MAXN = 100000; int val[MAXN]; int n; void Merge(int l, int mid, int r, int t[]) { int i = l, j = mid + 1, k = 0; while (i <= mid && j <= r) { if (val[i] <= val[j]) t[k++] = val[i++]; else t[k++] = val[j++]; } while (i <= mid) t[k++] = val[i++]; while (j <= r) t[k++] = val[j++]; for (i = 0; i < k; i++) val[l + i] = t[i]; } void MSort(int l, int r, int t[]) { if (l < r) { int mid = (l + r) / 2; MSort(l, mid, t); MSort(mid + 1, r, t); Merge(l, mid, r, t); } } void MergeSort() { int *memory = new int[n]; if (memory == NULL) return; MSort(0, n - 1, memory); delete[] memory; } int main() { scanf("%d", &n); for (int i = 0;i < n;i++) { scanf("%d", &val[i]); } MergeSort(); for (int i = 0;i < n;i++) { printf("%d ", val[i]); } puts(""); return 0; } /************************************************************** Problem: 2177 User: admin Language: C++ Result: Accepted Time:45 ms Memory:1952 kb ****************************************************************/