所以,我是c ++的初学者,我想比较使用模板的冒泡排序的执行时间和少量元素的经典函数(N = 2,4,6,8,10,12,16) 。因为N是如此之小,我循环函数说1000000次以获得可测量的结果。我是这样做的:
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;
结果不像我预期的那样,因为当我第二次运行循环时,我的数组已经排序了。如何在循环星形之前再次初始化数组?
答案 0 :(得分:3)
在循环中移动数组定义:
for (k=0; k<1000000; k++) {
int a[4] = {800, 768, 700, 652};
bubble_sort_function(a,4);
}
这样,每次执行循环时,都使用的是原始数组。
此外,在比较性能时需要注意两点:
这可以解释为什么你会得到不同版本的类似结果。
答案 1 :(得分:1)
尝试:
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;
答案 2 :(得分:1)
难道你不能只将初始化语句移动到循环体中吗?以下编译对我来说很好(作为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);
}
}