无法计数 - 比较操作的数量

时间:2016-10-24 15:33:02

标签: c

所以我有这段代码给了我。

for (int i = 0; i < 100; i++) {
   for (int j = 0; j < 100; j++) 
   {
     if (arr[j] < arr[i]) 
     {
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
     }
   }
}

我正在尝试计算代码运行时会出现的比较操作的数量。

初始比较一直到i = 100。所以外循环有101个比较。内部循环也有101个循环,但是内部的比较只会发生100次,因为j = 100不会发生这种比较。

到目前为止,我已经尝试过,但没有一个是正确的答案。

我有101 x(101 + 100)= 20301,这不是正确答案。

我在google上搜索了这个问题,并提出了一个与此相同的问题,但是回答了我能够自己回答的多少分配操作。 btw是25201。

3 个答案:

答案 0 :(得分:2)

我得到了20201。

#include <stdio.h>

int main(void) {
    int i, j;
    unsigned long count;

    count = 0;
    for (i = 0; ++count, i < 100; ++i) {
        for (j = 0; ++count, j < 100; ++j) {
            ++count;
        }
    }
    (void) printf("%lu\n", count);
    return 0;
}

答案 1 :(得分:1)

在内环上进行100次外环驱动101 + 100比较的比较。在外部循环上还有一个比较来检测循环终止,所以:

100 * (101 + 100) + 101 = 20201.

检测程序:

outer_cmps=0;
total_inner_cmps=0;
for (int i = 0; i < 100; i++) {
   ++outer_cmps;
   inner_cmps=0;
   for (int j = 0; j < 100; j++) 
   {
     ++inner_cmps;
     if (arr[j] < arr[i]) 
     {
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
     }
     ++inner_cmps;
   }
   ++inner_cmps;
   tota_inner_cmps += inner_cmps;
}
++outer_cmps;
total_cmps = outer_cmps + total_inner_cmps;

答案 2 :(得分:0)

那就是100 * 200 + 100 + 1 = 20101

(100次i,运行j循环100次,每次循环执行1次comparisson if (arr[j] < arr[i]),一次i循环在i==100和100次{{1}时失败在j

时失败的循环