【问题标题】:C++ function that compares runtime of different sort algorithms [closed]比较不同排序算法的运行时间的 C++ 函数
【发布时间】:2014-03-06 00:40:13
【问题描述】:

您好,我正在做的项目有不同的排序算法(QuickSort、BubbleSort 等)。 我测量了他们每个人的时间,最后我需要比较哪个是最快的,等等。

bool testyBubblesort(){
   long int before = GetTickCount();
   a.BubbleSort_int();
   long int after = GetTickCount();
   double dif = double((after - before));
   result &= testEqual(zoradane.vypis_pola(), a.vypis_pola(),dif, "Test sort array-int");
   comparison(dif);
   vypisVysledkuTestu(result, "Testy triedenia BubbleSortom");   
   return result;
}

这是我的函数,它测试数组是否排序并测量时间。重要的部分是 comparison(dif); 这应该是比较各种类型的函数。请注意,我也在其他方面使用此功能。

void comparison(double time){
    vector<int> all_times;
    all_times.push_back(time);
}

所以我在考虑制作矢量数组然后对其进行排序是个好主意,但我不知道我是如何总是得到一些错误的。 你能帮我吗 ? 谢谢

【问题讨论】:

  • 什么错误?请注意,您在每次调用 comparision 时都会重新创建一个新向量 all_times:错误很可能与此有关。
  • 我和 Stefano 在一起,这看起来是最严重的违规者。另外,你是作为double及时发送的,为什么你把那个向量作为int
  • 是的,这里可能有问题。但是我怎样才能在某个地方保存所有时间并将其与某些功能进行比较?
  • @user3287392 测试不同算法性能的最简单、最可靠的方法是使用分析器(参见例如'What can I use to profile C++ code in Linux?'shinyprofiler)。
  • all_times 不应是局部变量。它也不应该是整数向量。

标签: c++ function sorting vector time


【解决方案1】:

您没有与任何东西进行比较,因为您的向量只有一个元素。

您应该将“比较”替换为仅插入到全局声明的向量中。然后,在顶层(调用 testyBubblesort 的地方),并在那里进行比较。

一个更健壮的方法是创建一个向量,其中 MyStruct 被声明为一个双精度和一个字符串,以便您存储 {time, "Bubble Sort"}(允许您将运行时与使用的排序算法相关联。然后在顶层,只需在向量上使用内置的排序函数(您将必须使用接受函数的版本来定义如何对 MyStruct 进行排序)并从向量中获取第一个对象。然后打印出来字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2021-05-27
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多