1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <bits/stdc++.h> using namespace std; typedef long long LL;
LL n, a[100010];
void quick_sort(LL q[], LL l, LL r) { if (l >= r) return; LL i = l - 1, j = r + 1, x = q[l + (r - l) / 2]; while (i < j) { while (q[++i] < x); while (q[--j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j); quick_sort(q, j + 1, r); }
LL temp[100010];
void merge_sort(LL q[], LL l, LL r) { if (l >= r) return; LL mid = l + (r - l) / 2; merge_sort(q, l, mid); merge_sort(q, mid + 1, r); LL k = 0, i = l, j = mid + 1; while (i <= mid && j <= r) { if (q[i] <= q[j]) temp[k++] = q[i++]; else temp[k++] = q[j++]; } while (i <= mid) temp[k++] = q[i++]; while (j <= r) temp[k++] = q[j++]; for (i = l, j = 0; i <= r; i++, j++) q[i] = temp[j]; }
int main() { cin >> n; for (LL i = 0; i < n; i++) scanf("%lld", &a[i]);
quick_sort(a, 0, n - 1); merge_sort(a, 0, n - 1); for (LL i = 0; i < n; i++) printf("%lld ", a[i]);
return 0; }
|