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

来源:3-2 归并排序法的实现

风来坊

2018-05-20

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

http://img.mukewang.com/szimg/5b0145290001705008460283.jpg

http://img.mukewang.com/szimg/5b014548000144d706770442.jpg

注释掉前边的cout后:

http://img.mukewang.com/szimg/5b0145840001c6c708110310.jpg

http://img.mukewang.com/szimg/5b0145ab0001a3af06770442.jpg

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

写回答

1回答

liuyubobobo

2018-05-20

非常奇怪,我在我的环境下又实验了一遍,没有这个问题,和是否有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
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程