Time complexity 比较合并中的执行时间和时间复杂度&;快速排序

Time complexity 比较合并中的执行时间和时间复杂度&;快速排序,time-complexity,quicksort,mergesort,execution-time,Time Complexity,Quicksort,Mergesort,Execution Time,我在教科书中实现了Merge&Quick Sort(合并和快速排序),书中说每种排序的时间复杂性如下: 合并排序:O(n.log(n))/Quick Sort:averageO(n.log(n))和O(n2)在最坏的情况下(如果对键数组进行了排序) 所以我用两种数组执行程序:排序数组和随机数组,大小不同 因为我想得到平均时间,所以每个病例我都试了10次 以下是合并和快速排序的代码: #包括 #包括 #包括 #包括 使用名称空间std; 无效合并(矢量和s、整数低位、整数中档、整数高位){ int

我在教科书中实现了Merge&Quick Sort(合并和快速排序),书中说每种排序的时间复杂性如下: 合并排序:O(n.log(n))/Quick Sort:averageO(n.log(n))O(n2)在最坏的情况下(如果对键数组进行了排序)

所以我用两种数组执行程序:排序数组和随机数组,大小不同

因为我想得到平均时间,所以每个病例我都试了10次

以下是合并和快速排序的代码:

#包括
#包括
#包括
#包括
使用名称空间std;
无效合并(矢量和s、整数低位、整数中档、整数高位){
int i=低;
int j=mid+1;
int k=低;
向量u(s);

而(我你在这个问题上发布了相同的代码:你没有考虑我的答案

你的
MergeSort
函数有一个缺陷:你在
merge
中复制了整个数组,造成了大量开销和二次时间复杂度。这个看似无辜的定义:
向量u(s)
u
定义为一个向量,初始化为
s
的副本,即完整数组


C++是一种非常强大的语言,通常过于强大,充满了这样的陷阱和陷阱。从已知的算法时间复杂度来看,您尝试验证您的程序是否达到了预期的性能是一件非常好的事情。这种担心太少了。

您在这个问题中发布了相同的代码:但您没有接受我的回答考虑在内了

你的
MergeSort
函数有一个缺陷:你在
merge
中复制了整个数组,造成了大量开销和二次时间复杂度。这个看似无辜的定义:
向量u(s)
u
定义为一个向量,初始化为
s
的副本,即完整数组


C++是一种非常强大的语言,通常功能过于强大,充满了这样的陷阱和陷阱。从已知的算法时间复杂度来看,您尝试验证程序是否满足预期性能是一件非常好的事情。这种问题太少了。

可能与超过更快缓存的大小有关。Say一级缓存是32 KB,那么一级缓存中可以容纳3000个整数,但不是60000个。时间似乎很慢;您是在某种调试模式下进行测试的吗?我只是通过调试进行测试,而不是“不调试就开始”,我想知道我做的是否正确。我理解你所说的,并且非常感激。那么,这就是为什么当我使用随机测试快速排序时,时间有时会变得更大的原因吗?(比如10个打印时间中的一个是1500毫秒,其他的都是150毫秒,N=34000)增加样本大小,直到耗时最长的算法大约为1分钟。你无法将如此短的时间与渐进度量进行比较。这可能与超过更快缓存的大小有关。假设一级缓存为32 KB,那么一级缓存中可以容纳3000个整数,但不是60000个。时间似乎非常慢;你是否在某种程度上测试过这一点调试模式?我只是用调试来测试它,而不是“不调试就开始”,我想知道我做得是否正确。我理解你所说的,并且非常感激。那么,这就是为什么我用随机测试快速排序时,时间有时会大得多的原因吗?(如10个打印时间中的一个为1500ms,其他时间均为150ms,N=34000)增加样本量,直到花费最长时间的算法大约为1分钟。你无法将如此短的时间与渐进度量进行比较。我多么愚蠢……我以为我已经修复了合并函数,但在复制和粘贴过程中它仍然是以前的代码,这并不意味着我没有接受答案。对不起,再次感谢:D@qkekehrtnfl97:没问题。你可能也会投票给对你有帮助的答案。我是多么愚蠢……我以为我已经修复了合并函数,但在复制和粘贴过程中它仍然是以前的代码,这并不意味着我没有接受答案。对不起,再次感谢:D@qkekehrtnfl97:没问题。你可以投票选出对你有帮助的答案你也是。