1
+ #include < bits/stdc++.h>
2
+
3
+ using ll = long long int ;
4
+
5
+ void merge (std::vector<ll> &data, ll low, ll mid, ll high)
6
+ {
7
+ ll leftSize = mid - low + 1 , rightSize = high - mid;
8
+ std::vector<ll> left (leftSize);
9
+ std::vector<ll> right (rightSize);
10
+
11
+ for (ll i = 0 ; i < leftSize; i++)
12
+ {
13
+ left[i] = data[i + low];
14
+ }
15
+ for (ll j = 0 ; j < rightSize; j++)
16
+ {
17
+ right[j] = data[mid + j + 1 ];
18
+ }
19
+
20
+ ll i = 0 , j = 0 , k = low;
21
+ while (i < leftSize && j < rightSize)
22
+ {
23
+ if (left[i] <= right[j])
24
+ {
25
+ data[k++] = left[i++];
26
+ }
27
+ else
28
+ {
29
+ data[k++] = right[j++];
30
+ }
31
+ }
32
+ while (i < leftSize)
33
+ {
34
+ data[k++] = left[i++];
35
+ }
36
+ while (j < rightSize)
37
+ {
38
+ data[k++] = right[j++];
39
+ }
40
+ }
41
+
42
+ void mergeSort (std::vector<ll> &data, ll low, ll high)
43
+ {
44
+ if (high > low)
45
+ {
46
+ ll mid = low + (high - low) / 2 ; // used to avoid overflow
47
+ mergeSort (data, low, mid);
48
+ mergeSort (data, mid + 1 , high);
49
+ merge (data, low, mid, high);
50
+ }
51
+ }
52
+
53
+ void printArray (std::vector<ll> arr)
54
+ {
55
+ for (int i = 0 ; i < arr.size (); ++i)
56
+ {
57
+ std::cout << arr[i] << " " ;
58
+ }
59
+ std::cout << " \n " ;
60
+ }
61
+
62
+ int main ()
63
+ {
64
+ int t;
65
+ std::cin >> t;
66
+ while (t--)
67
+ {
68
+ ll size, element;
69
+ std::cin >> size;
70
+ std::vector<ll> data;
71
+ data.reserve (size);
72
+ for (ll i = 0 ; i < size; i++)
73
+ {
74
+ std::cin >> element;
75
+ data.emplace_back (element);
76
+ }
77
+ mergeSort (data, 0 , data.size () - 1 );
78
+ printArray (data);
79
+ }
80
+ return 0 ;
81
+ }
0 commit comments