共48道题,当前是第23

初赛真题

01 #include <iostream>
02 using namespace std;
03 
04 const int maxn = 105;
05 int n, a[maxn], b[maxn];
06 
07 int main() {
08     cin >> n;
09     int x;
10     for (int i = 1; i <= n; i++) {
11         cin >> x;
12         a[i] = b[i] = x;
13     }
14     for (int i = 1; i <= n; i++)
15         for (int j = i + 1; j <= n; j++) {
16             if (a[i] > a[j]) swap(a[i], a[j]);
17             if (b[i] < b[j]) swap(b[i], b[j]);
18         }
19     for (int i = 1; i <= n; i++) cout << a[i] << " ";
20     cout << "\n";
21     for (int i = 1; i <= n; i++) cout << b[i] << " ";
22     cout << "\n";
23     return 0;
24 }

1. B。
2. A。
3. B。
4. B。
5. D。
6. C。

该段程序实现了选择排序的算法,每次在后⾯找出⼀个最⼤/最⼩的元素放到当前的位置。使⽤了两个数组,第⼀个数组为从⼩到⼤的排序结果,第⼆个数组为从⼤到⼩的排序结果。时间复杂度为 $O(n^2)$,存在更优的算法例如使⽤快速排序来完成排序过程。

Question

1. 若输⼊的 X[1],X[2],...,X[N] 中有相同的数,程序会陷⼊死循环

2. 当且仅当输⼊的 X[1],X[2],…,X[N] 全部相同时输出的两⾏结果相同。( )

3. 该算法的原理是基数排序。

4. 若输⼊的 X[1],X[2],...,X[N] 互不相同,则下列说法正确的是( )

5. 下列说法不正确的是( )

6. 该程序的时间复杂度为( )