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
  | 
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6 + 10;
int a[N];
int temp[N];
void merge(int a[], int l, int mid, int r){
    int i = l, j = mid+1, cur = 0;
    while(i <= mid && j <= r){
        if(a[i] <= a[j]){
            temp[cur++] = a[i++];
        }else{
            temp[cur++] = a[j++];
        }
    }
    while(i <= mid)    temp[cur++] = a[i++];
    while(j <= r)   temp[cur++] = a[j++];
    for(int i = l, j = 0; j < cur; i++, j++){
        a[i] = temp[j];
    }
}
void merge_sort(int a[], int l, int r){
    if(l >= r)  return;
    int mid = l + r >> 1;
    
    merge_sort(a, l, mid);
    merge_sort(a, mid+1, r);
    
    merge(a, l, mid, r);
}
int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    
    merge_sort(a, 0, n-1);
    
    for(int i = 0; i < n; i++){
        printf("%d ", a[i]);
    }
}
  |