计算C程序的效率

Calculating efficiency of a C program

我正在写一些代码并且必须计算效率,但我很挣扎。为了方便起见,我只是将它们称为函数“f”。这两个没有关系:

int f(int a, int b) {
  int ans = 0;
  for (int i = a; i > 1; i /= 2) {
    if (i % 2) {
      ans += b;
    }
    b += b;
  }
  return ans;
}
///////////////////////////////////////////
int f(int n) {
  int count = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 1; j < i; ++j) {
      count += i * j;
    }
    for (int k = 0; k < i * n; ++k) {
      count -= k;
    }
  }
  
  return count;
}

对于第一个,我认为它是 O(nlogn),因为 i 基于 a 并且有 2 个操作,if 语句和更新。对于第二个它应该是 O(n^2) 因为有一个嵌套循环。如果我做对了,请告诉我,谢谢。

第一个函数是 O(log a),因为唯一的循环从 a 开始,并且每次迭代时值减半。

第二个函数是 O(n^3),因为外循环是 n 次,而(更大的)内循环是 i*n 次。