vs2010环境下数字较大执行后停止工作?

来源:2-7 更多关于O(n^2)排序算法的思考

zjuPeco

2017-02-14

所有程序见:https://github.com/zjuPeco/Sorting/tree/master


测试了Selection Sort,Insertion Sort和Shell Sort,写的程序和老师给的几乎一模一样,n = 10000时正常执行,n = 100000的时候会出现下图的情况。

http://szimg.mukewang.com/58a307680001b05d06770442.jpg

还有就是一直有这么一个警告在,也不知道和这个有没有关系,该怎么处理?

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2212) : see declaration of 'std::_Copy_impl'
1>          e:\master me\c++\test_samples\algorithmonimooc_2_1\algorithmonimooc_2_1\sorttesthelper.h(70) : see reference to function template instantiation '_OutIt std::copy<int[],int*>(_InIt,_InIt,_OutIt)' being compiled
1>          with
1>          [
1>              _OutIt=int *,
1>              _InIt=int []
1>          ]




写回答

1回答

liuyubobobo

2017-02-14

尝试不要调用copy函数,而是手动做一次循环赋值。VS编译器认为copy函数不安全。


另外请确认你的代码没有越界等问题。看你的截图,Selection Sort和Insertion Sort都跑完了,有可能Shell Sort实现有问题。。。


在一般计算机上,O(n^2)的算法跑10万数据量,要等不少时间。。。但是Shell Sort不是O(n^2)级别的,对于完全随机的数据,应该比Selection Sort和Insertion Sort快很多。

1
1
zjuPeco
老师真厉害,感谢老师!!!把copy函数改了之后警告没有了;仔细检查了一下shellSort的程序。发现for (; j >= gap && e < arr[j - gap]; j -= gap)写成了for (; j >= 0 && e < arr[j - gap]; j -= gap),导致了下标越界。。。
2017-02-15
共1条回复

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

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

11186 学习 · 1614 问题

查看课程