所以我有这段代码给了我。
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。
答案 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
)