Tim*_*key 8 c++ java compare quicksort
我创建了两个项目.一个用C++编写,一个用Java编写.我为QuickSort和SelectionSort进行了时间试验.奇怪的是,我发现了一些非常奇怪的行为.
以下是10,000个数组的结果:
SelectionSort Java:80毫秒
SelectionSort C++:2914毫秒
QuickSort Java:1毫秒
QuickSort C++:约45秒
现在叫我疯了但我总是被告知QuickSort是最快的.这在Java中证明是正确的,但在C++中它完全被关闭.
所以我的问题是,C++是否以不同的方式处理QuickSort?
我试图在语言之间保持相同的功能,除了在C++和int数组中使用向量之外,它们完全相同.无论如何我更喜欢使用向量,因为我想在C++中使用sort的实际项目需要一个向量.
我确定这是一个愚蠢的错误或我正在制作的东西,但请提供一些见解,为什么会发生这种情况.
编辑:
我相信我明白了问题所在.感谢大家的极快响应.我将修改我的代码以按预期工作.我知道这是一个简单的错误.此外,虽然提出的问题非常令人尴尬,但回答是有教育意义的.
Mar*_*k B 18
您的quicksort函数会在每次递归调用时按值返回整个向量,即使函数在适当位置修改它也是如此.可能会回归所有那些临时工,然后把它们扔掉,伤害表现.
只需将函数更改为void并删除结束返回并查看其行为方式.
编辑:如果您更习惯于几乎所有东西都是垃圾收集引用的Java,请注意在C++中按值返回(就像返回类型一样)通常会复制所返回的内容.正如@Johannes Schaub - litb所指出的那样,编译器甚至无法优化返回,因为它没有返回自动(本地)变量.
编辑2:如果你不是这样做的练习,你应该使用std::sort或std::stable_sort(后者如果你知道你的数据已经几乎已经排序,或者你需要保留重复的顺序).例如std::sort(A.begin(), A.end());
| 归档时间: |
|
| 查看次数: |
3750 次 |
| 最近记录: |