根据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(一千万个随机数))排序。测试函数如下: