簡體   English   中英

無法計數 - 比較操作的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM