关于STL中sort效率高于C库函数qsort

jackyjkchen 2010-04-04 08:50:10
std::sort()比C标准库qsort快是肯定的,能快一倍,对于这一点的解释向来有两种,并且从STL的源码中也得到了确认。

一种是sort不是快速排序,而是多种排序的结合,这一点得到确认,STL的sort源码中可以看到快速排序、堆排序、归并排序等多种排序方式的结合,但是qsort在效率上也是做了优化的,比起一般快排要快得多,三种排序的结合又没有可能让STL的sort再比qsort快上一倍?

更多的说法是说qsort最后一个参数回调函数的影响,多次调用造成的后果。这也是肯定有开销的,但是使用改用内联并没有效率上的提升。

许多理论上的说法在实践中受多种因素的干扰往往会走样。

大家畅所欲言
...全文
802 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoweisong 2010-04-06
  • 打赏
  • 举报
回复
学习!,mark
herman~~ 2010-04-04
  • 打赏
  • 举报
回复
学习。。。
FingerStyle 2010-04-04
  • 打赏
  • 举报
回复
mark
jackyjkchen 2010-04-04
  • 打赏
  • 举报
回复
现在有个很恶搞的问题,微软将qsort的实现公开了,我将qsort.c直接拷贝过来,qsort换个名字(防止和crt冲突),再进行测试,速度大幅提升,已经和std::sort一样了!
yshuise 2010-04-04
  • 打赏
  • 举报
回复
用实验来推理论,用理论推实验并举。
dubiousway 2010-04-04
  • 打赏
  • 举报
回复

我觉得有时候理论讨论的价值,比起试验的结果,,有时候就是个joke。

在测试数据量达到一定程度的时候,结果就是事实。(简单而少的数据测试不一定准确)

随机1000组数
每组100000个随机数

比一下,马上结论出来。
yshuise 2010-04-04
  • 打赏
  • 举报
回复
大家可以看看算法宗师的高徒写的书,的确讲得很本质。
yshuise 2010-04-04
  • 打赏
  • 举报
回复
第一:std::sort用的快速排序和插入排序的结合。当元素个数是10~15的插入排序的效率较高。
当大于这个数字的时候用的是快速排序。实际上快速排序分解成无数个递归,无数个子递归自然是插入排序。

第二:c++函数对象可以inline,而c传递函数子针无法inline
Proteas 2010-04-04
  • 打赏
  • 举报
回复
最近做 iPhone 开发,第一次感觉到效率如此重要。到处都在说效率。
kingstarer 2010-04-04
  • 打赏
  • 举报
回复
qsort怎么改内联? 除非写死了调用的函数 不然内联做不到吧
o笨笨猪o 2010-04-04
  • 打赏
  • 举报
回复
C的qsort是没办法用内联的比较函数,因为它要求传递的是函数指针,因为内联函数无法取地址,所以即使你将比较函数定义为内联的,它仍然无法内联。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧