请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,关于运行两次归并算法,时间不一致的问题

我运行了您的课程代码,发现运行两次归并程序时间是一致的,但是我把 //cout << "Test for random array, size = " << n << ", random range [0, " << n << "]" << endl;这行打印输出注释掉再次运行,第一次排序用的时间很长,不清楚是什么原因,下面是运行情况,

https://img1.sycdn.imooc.com//szimg/5b0145290001705008460283.jpg

https://img1.sycdn.imooc.com//szimg/5b014548000144d706770442.jpg

注释掉前边的cout后:

https://img1.sycdn.imooc.com//szimg/5b0145840001c6c708110310.jpg

https://img1.sycdn.imooc.com//szimg/5b0145ab0001a3af06770442.jpg

测试环境为VS2013,想请教一下老师导致这种现象的原因是什么?谢谢

正在回答

1回答

liuyubobobo 2018-05-20 22:37:41

非常奇怪,我在我的环境下又实验了一遍,没有这个问题,和是否有cout没有关系。尤其是在你的测试中,第二次测试一下子跳到了7s多,实在是太慢了。我不确定你的系统或者执行器发生了什么。


对于使用VS进行算法性能测试,建议使用release模式,而非debug模式。VS的debug模式性能结果差距会和release模式相差较大。


我的测试用main函数如下,供参考:

int main() {

    int n = 150000;

    // 删除以下cout对测试结果没有影响
    cout<<"Test for random array, size = "<<n<<", random range [0, "<<n<<"]"<<endl;
    
    int* arr1 = SortTestHelper::generateRandomArray(n, 0, n);
    int* arr2 = SortTestHelper::copyIntArray(arr1, n);
    SortTestHelper::testSort("Merge Sort 1", mergeSort, arr1, n);
    SortTestHelper::testSort("Merge Sort 2", mergeSort, arr2, n);
    
    delete[] arr1;
    delete[] arr2;
    
    return 0;
}


2 回复 有任何疑惑可以回复我~
  • 提问者 风来坊 #1
    在VS环境下选择 只运行不调试(ctrl+F5)模式运行 ,两次结果基本相同,看来是VS里面不知道做什么处理了,另外我在Qt下运行也没这个问题。多谢老师
    回复 有任何疑惑可以回复我~ 2018-05-20 23:46:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信