测试std::sort 和std::qsort 的性能, 修改编译器栈大小

本文探讨了C++的std::sort与C的std::qsort在性能上的差异,指出std::sort通常更快,原因在于其利用inline和functor优化了比较函数。通过测试一千万个随机数的排序,发现默认栈内存不足以容纳大型数组,需要手动调整编译器栈大小。此外,必须在release模式下编译以启用所有优化,否则std::sort的性能优势可能无法体现。测试结果显示,C++的std::sort在性能上优于C的std::qsort。
摘要由CSDN通过智能技术生成

根据effective STL中Item 46 提到, C程序员很难接受C++的STL中std::sort(定义于头文件<algorithm>)竟然比C语言的std::qsort(定义与头文件<cstdlib>中)快了670%。 最后Scot Meyer建议我们我们要使用C++的std::sort函数。 

我们知道qsort 实现的排序算法是快排, 但是std::sort 实现的排序算法并不知道, 有人说这得看是哪一个STL版本了。 std::sort的大部分实现的是quick sort(也是快排), 或者是一个类似于插入排序的, 结合了快排, 堆排, 以及插入排序的混合算法。 总而言之,sort和qsort的算法复杂度是O(nlogn)。

但是, std::sort更快。 快的原因是运行的时候, sort函数使用inline的方式调用比较函数(comparision function), 然而qsort使用的是指针的方式调用(即function pointer)comparison function。 Meyer称, sort通过使用comparing funcion object(即functor) 作为算法的参数, 使得排序的时间大大降低, 这是一个"abstraction bonus"。

为了体现个算法性能差别, 我们对size很大的数组(大小为10000000(一千万个随机数))排序。测试函数如下:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值