请大牛来解释对于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:当递归层数较多时改用堆排序,以处理对快速排序不利的数据分布。