用计数器变量测量运行时

时间:2014-11-18 21:32:49

标签: c++ algorithm sorting runtime big-o

我目前正在进行一项任务,要求我们实施一些不同的排序,并引入计数器变量来衡量运行时间。

我的问题是,我对是否包含某些"操作感到困惑。作为会增加我的反击的东西。例如,我的教科书上写道:

    ....

所以,根据我的理解,我应该计算"比较"但我不明白这是否适用于if语句,while循环等。

例如,这是我的插入排序。

float insertionSort(int theArray[], int n) {
    float count = 0;

    for (int unsorted = 1; unsorted < n; unsorted++) {
        int nextItem = theArray[unsorted];
        int loc = unsorted;

        while ((loc > 0) && (theArray[loc - 1] > nextItem)) {
            theArray[loc] = theArray[loc - 1];
            theArray[loc] = nextItem;
            loc--;
            count += 4;
        }
    }

    return count;
}

如您所见,对于while循环的每次迭代,我将计数增加4。我想这真的突出了我的问题。

我的理由是我们在while循环的条件语句中进行了两次比较:

(loc&gt; 0&amp;&amp; theArray [loc - 1]&gt; nextItem)

之后,我们在阵列中进行了两次移动。根据我的理解,这意味着我们已经执行了4次&#34;操作&#34;为了在执行结束时测量运行时间,我们将计数器加4。

这是对的吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您的交换次数与您的比较次数成正比。此外,您的loc > 0是我认为的“附带操作”,如摘录中所述。因此,假设比较和移动是恒定时间操作(它们是整数),只需在每次循环迭代后递增计数器,就可以在数据中获得相同的趋势。