1 void merge(int v[], int b, int n) {
2 int i = 0;
3 int j = b;
4 int *temp = new int[n];
5 for (int k = 0; k < n; k++) {
6 if (i >= b) {
7 temp[k] = v[j++];
8 continue;
9 }
10 if (j >= n) {
11 temp[k] = v[i++];
12 continue;
13 }
14 if (v[i] < v[j]) {
15 temp[k] = v[i++];
16 } else {
17 temp[k] = v[j++];
18 }
19 }
20 memcpy(v, temp, n * sizeof(int));
21 delete[] temp;
22 }
23
24 void merge_sort(int v[], int n) {
25 if (n > 1) {
26 int b = n / 2;
27 merge_sort(v, b);
28 merge_sort(v + b, n - b);
29 merge(v, b, n);
30 }
31 }