在循环中初始化一个数组
initialize an arry in the loop
所以,我是c++的初学者,我想比较使用模板和经典函数对少量元素(N=2,4,6,8,10,12,16)进行冒泡排序的执行时间。因为N很小,我要循环函数100万次才能得到可测量的结果。我是这样做的:
main() {
int t1, t2, h, m, s,k=0;
int a[4] = {800,768,700,652};
t1=GetTickCount();
for (k=0; k<1000000; k++){
// bubble_sort_template<4>(a);
bubble_sort_function(a,4);
}
t2=GetTickCount() - t1;
结果不像我预期的那样,因为当我第二次运行循环时,我的数组已经排序了。如何在循环开始之前再次初始化数组?
将数组定义移动到循环中:
for (k=0; k<1000000; k++) {
int a[4] = {800, 768, 700, 652};
bubble_sort_function(a,4);
}
这样,每次执行循环时,都在使用原始数组。
此外,在比较性能时需要注意两点:
- 模板化版本和非模板化版本不太可能有不同的性能行为。在编译时间期间,编译器根据类型参数生成不同的函数。所以当你测试这个函数时,你实际上是在运行同样的代码。
- 当你比较不同算法的性能时,一个小的输入(在这种情况下是小数组)通常是不够的,因为两者都运行得非常快。你最好尝试更大的输入来放大算法之间的差异。
这应该可以解释为什么不同的版本得到相似的结果。
try:
main() {
int t1, t2, h, m, s,k=0;
t1=GetTickCount();
for (k=0; k<1000000; k++){
int a[4] = {800,768,700,652};
// bubble_sort_template<4>(a);
bubble_sort_function(a,4);
}
t2=GetTickCount() - t1;
就不能把初始化语句移到循环体中吗?以下编译对我来说很好(作为c++):
extern void bubble_sort_function(int *, int);
main()
{
for (int k=0; k<1000000; k++){
int a[4] = {800,768,700,652};
bubble_sort_function(a,4);
}
}