归并排序
作者:
Jiarui1111
,
2023-09-25 18:32:16
,
所有人可见
,
阅读 108
#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int n, a[N], tmp[N];
inline void merge_sort(int q[], int l, int r) {
if(l >= r) return ;
int mid = l + r >> 1;
merge_sort(q, l, mid), merge_sort(q, mid + 1, r);
int k = 0, i = l, j = mid + 1;
while(i <= mid && j <= r) {
if(q[i] <= q[j]) tmp[k ++] = q[i ++];
else tmp[k ++] = q[j ++];
}
while(i <= mid) tmp[k ++] = q[i ++];
while(j <= r) tmp[k ++] = q[j ++];
for (int i = l, j = 0; i <= r; i ++, j ++) q[i] = tmp[j];
}
signed main() {
cin >> n;
for (int i = 1; i <= n; i ++) cin >> a[i];
merge_sort(a, 1, n);
for (int i = 1; i <= n; i ++) {
cout << a[i] << " \n"[i == n];
}
return 0;
}