我目前正在进行一项任务,要求我们实施一些不同的排序,并引入计数器变量来衡量运行时间。
我的问题是,我对是否包含某些"操作感到困惑。作为会增加我的反击的东西。例如,我的教科书上写道:
....
所以,根据我的理解,我应该计算"比较"但我不明白这是否适用于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。
这是对的吗?非常感谢您的帮助。
答案 0 :(得分:1)
在这种情况下,您的交换次数与您的比较次数成正比。此外,您的loc > 0
是我认为的“附带操作”,如摘录中所述。因此,假设比较和移动是恒定时间操作(它们是整数),只需在每次循环迭代后递增计数器,就可以在数据中获得相同的趋势。