[英]Can't Count - Number of Comparison Operations
所以我有這段代碼給了我。
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上搜索過這個問題,並提出了一個與此相同的問題,但是回答了我自己能夠回答的多少分配操作。 順便說一句是25201。
我得到了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;
}
在外環路上進行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;
所以這將是100 * 200 + 100 + 1 = 20101
(100次i,運行j循環100次, if (arr[j] < arr[i])
每循環執行1次比較,並且當i==100
和100次j
循環失敗時,一個i
循環失敗當j==100
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.