阅读程序,完成以下问题
01 #include <iostream>
02 using namespace std;
03 const int maxn = 500000, INF = 0x3f3f3f3f;
04 int L[maxn / 2 + 2], R[maxn / 2 + 2];
05 void unknown(int a[], int n, int left, int mid, int right) {
06 int n1 = mid - left, n2 = right - mid;
07 for (int i = 0; i < n1; i++)
08 L[i] = a[left + i];
09 for (int i = 0; i < n2; i++)
10 R[i] = a[mid + i];
11 L[n1] = R[n2] = INF;
12 int i = 0, j = 0;
13 for (int k = left; k < right; k++) {
14 if (j == n2 || i < n1 && L[i] <= R[j])
15 a[k] = L[i++];
16 else
17 a[k] = R[j++];
18 }
19 }
20 void unknownsort(int a[], int n, int left, int right) {
21 if (left + 1 < right) {
22 int mid = (left + right) / 2;
23 unknownsort(a, n, left, mid);
24 unknownsort(a, n, mid, right);
25 unknown(a, n, left, mid, right);
26 }
27 }
28 int main() {
29 int a[maxn], n;
30 cin >> n;
31 for (int i = 0; i < n; i++) cin >> a[i];
32 unknownsort(a, n, 0, n);
33 for (int i = 0; i < n; i++) {
34 if (i) cout << " ";
35 cout << a[i];
36 }
37 cout << endl;
38 return 0;
39 }
1. B。
2. B。
3. B。
4. B。
5. D。
6. B。
归并排序模版。