#include <iostream>#include <cstdlib>using namespace std; int n;int d[10000]; int find(int L, int R, int k) { int x = rand() % (R - L + 1) + L; swap(d[L], d[x]); int a = L + 1, b = R; while (a < b) { while (a < b && d[a] < d[L]) ++a; while (a < b && d[b] >= d[L]) --b; swap(d[a], d[b]); } if (d[a] < d[L]) ++a; if (a - L == k) return d[L]; if (a - L < k) return find(a, R, k - (a - L)); return find(L + 1, a - 1, k);} int main() { int k; cin >> n; cin >> k; for (int i = 0; i < n; ++i) cin >> d[i]; cout << find(0, n - 1, k); return 0;}假设输入的 和 都是不超过 的正整数,且 不超过 ,并假设 rand() 函数产生的是均匀的随机数,完成下面的判断题和单选题:
第 行的 的数值范围是 到 ,即 。( )
将第 行的 d[a] 改为 d[b],程序不会发生运行错误。( )
(2.5 分)当输入的 是严格单调递增序列时,第 17 行的 swap 平均执行次数是( )。【编者注:本题为错题,请选择 A 获取对应的分数】
(2.5 分)当输入的 是严格单调递减序列时,第 17 行的 swap 平均执行次数是( )。
(2.5 分)若输入的 为 ,此程序①平均的时间复杂度和②最坏情况下的时间复杂度分别是( )。
(2.5 分)若输入的 都为同一个数,此程序平均的时间复杂度是( )。