#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int n;
int arr[N], tmp[N];
void merge_Sort(int arr[], int left, int right)
{
if (left >= right) return;
int mid = (left + right) >> 1;
merge_Sort(arr, left, mid);
merge_Sort(arr, mid + 1, right);
int k = 0, l = left, r = mid + 1;
while (l <= mid && r <= right) //类似双指针算法
{
if (arr[l] <= arr[r])tmp[k++] = arr[l++];
else tmp[k++] = arr[r++];
}
while (l <= mid)tmp[k++] = arr[l++]; // 去尾操作
while (r <= right)tmp[k++] = arr[r++];
for (l = left, r = 0; l <= right; l++, r++)arr[l] = tmp[r]; //修改原数组数据
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)scanf("%d", &arr[i]);
merge_Sort(arr, 0, n - 1);
for (int i = 0; i < n; i++)printf("%d ", arr[i]);
return 0;
}
06-28
217
05-16
10-03
1184