c++ - 在循环中初始化一个数组

标签 c++ sorting

所以,我是 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;

结果与我预期的不同,因为当我第二次运行循环时,我的数组已经排序。如何在循环开始之前再次初始化数组?

最佳答案

将数组定义移动到循环内:

for (k=0; k<1000000; k++) {
  int a[4] = {800, 768, 700, 652};
  bubble_sort_function(a,4);
}

这样,每次执行循环时,你都在使用原始数组。

另外,在比较性能时需要注意两点:

  • 模板化和非模板化版本不太可能具有不同的性能行为。在编译时,编译器会根据类型参数生成不同的函数。因此,当您测试该功能时,实际上是在运行相同的代码。
  • 当您比较不同算法的性能时,小输入(在本例中为小数组)通常是不够的,因为它们都运行得非常快。您最好尝试更大的输入以放大算法之间的差异。

这应该可以解释为什么不同版本会得到相似的结果。

关于c++ - 在循环中初始化一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17090160/

相关文章:

c++ - 为什么在 C++ 中使用 tinyXML2 会得到 NULL 指针?

c++ - 如何使用 PostThreadMessage 从 C++ 关闭 Internet Explorer

c++ - wxWidgets 中的奇怪注释

c++ - 有没有办法配置 clang-format 以将嵌套的命名空间声明保持在同一行?

python - 在 2 个列表中查找最接近的日期时间

arrays - 对可变长度项目/算法进行排序

c - C 程序中的搜索和排序?

C++是否可以确定指针是否指向有效对象?

c# - 如何对找到的棋盘角进行排序?

java - 快速排序算法未正确分配枢轴