关于时间复杂度
  • 板块学术版
  • 楼主huangziqinFJ人炖蒟蒻
  • 当前回复12
  • 已保存回复12
  • 发布时间2022/9/15 20:45
  • 上次更新2023/10/27 11:30:19
查看原帖
关于时间复杂度
185223
huangziqinFJ人炖蒟蒻楼主2022/9/15 20:45

求助,请问时间复杂度怎么算

比如

#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;
}              

这个是求数列中第k小值的代码,

这三个问题如何求解

  • (2.5 分)当输入的 d[i] 是严格单调递减序列时,第 17 行的 swap 平均执行次数是( )。

  • (2.5 分)若输入的 d[i] 为 i,此程序①平均的时间复杂度和②最坏情况下的时间复杂度分别是( )。

  • (2.5 分)若输入的 d[i] 都为同一个数,此程序平均的时间复杂度是( )。

2022/9/15 20:45
加载中...