首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请大牛回解释对于qsort和sort在VS6.0/2008/20102012 和 Qt中速度的差别

2013-06-26 
请大牛来解释对于qsort和sort在VS6.0/2008/20102012 和 Qt中速度的差别测试程序如下:问题:1 为什么qt在DEB

请大牛来解释对于qsort和sort在VS6.0/2008/20102012 和 Qt中速度的差别
测试程序如下:



问题:
1 为什么qt在DEBUG和RELEASE下时间差别这样小?
2 VS系列越新DEBUG运行时间越长,是什么道理?
3 VS系列的qsort越来越快,而sort运行越来越慢,是什么道理?
4 VS越新DEBUG和RELEASE速度差别越大,是为什么?

测试 Qt Visual?Studio
[解决办法]
VS2012 sort 15 qsort 31
qsort竟然和你的时间一样

话说养成好习惯bool myfunction (const data &i, const data &j)
[解决办法]
1 为什么qt在DEBUG和RELEASE下时间差别这样小?
答:这说明qt中的DEBUG代码中排错检查很少。

2 VS系列越新DEBUG运行时间越长,是什么道理?


答:说明新版的DEBUG代码中增加了更多的排错代码。

3 VS系列的qsort越来越快,而sort运行越来越慢,是什么道理?
答:qsort变快可能是库中算法有了改进,或是编译器的优化能力有所增强。
    sort变慢……如二楼所言,先把myfunction (data i,data j)的参数改为引用再测一下试试。

4 VS越新DEBUG和RELEASE速度差别越大,是为什么?
答:参见第二条。

此外,qsort一般是快速排序(quicksort),而std::sort一般实现为内省排序(introsort)。

introsort算法:
1:使用快速排序,递归将序列分割为“较大数”和“较小数”两个序列,直到序列长度为1。
2:当序列长度比较小时,改用插入排序,以避免复杂算法带来的额外开销。
3:当递归层数较多时改用堆排序,以处理对快速排序不利的数据分布。


热点排行