共48道题,当前是第7

初赛真题

阅读程序,完成以下问题

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。

归并排序模版。

Question

1. 第 13 ⾏ for (int k = left; k < right; k++) { 的 < 改为 <= 将不会改变运⾏结果。( )

2. 第 21 ⾏ if (left + 1 < right) { 的 < 改为 <= 将不会改变运⾏结果。( )

3. 此类排序⽅法是⾼效的但是不稳定。( )

4. 第 4 ⾏的 个 +2 都去掉将不会改变运⾏结果。( )

5. 此题是哪种排序( )

6. 此题⽤到了( )思想

陈伦制作 版权所无 粤ICP备16127491号-1