首页 > 代码库 > STL中的各种排序函数

STL中的各种排序函数

标准c++库中提供六种排序方法:qsort(),  sort(),stable_sort(),  partial_sort(),  list::sort(),  set/multiset

qsort()比sort()慢并且不能排序构造函数、虚函数,一般不推荐使用。写一个比较函数传递给qsort()很麻烦;

后五个排序中,前三个是泛型算法,后两个则使用了某些容器的特别特性。所有的这些都是使用operator()来比较对象,但是在必要时指定用户自己的比较函数。

后五个每个都提供了自己的特征:

1、sort() 通常速度最快

2、stable_sort() 保证了等价元素在顺序上的稳定

3、partial_sort()允许只排序出前N个元素

4、list::sort() 操纵指针,而不是拷贝元素

5、set允许在一个已序区间快速的插入和删除

 标准模板库(STL)在库头文件<algorithm>中提供了几个排序函数。STL类List就有自己的内置的sort函数。对容器来说,List的sort函数比一般的排序算法快,因为它对列表进行了优化,而且是交换指针,不是复制对象。在排序双向队列、字符串、数组、或矢量时,使用一般的sort函数,注意这个sort函数不稳定,值相同的元素不能保证处于相同的顺序位置上,为此应使用stable_sort函数。只有在需要对一个区域的元素进行排序或分区时,其他排序算法才比较高效,如果只需要对一定区域的元素进行排序,可以使用partial_sort。该区域在参数中指定,partial_sort_copy函数会生成一个容器,其中包含指定区域的元素。Nth_element 函数可以对一定区域的元素进行部分排序,但只能保证第n个元素是分界点。在数组中第n个元素左边的所有元素会小于或等于第n 个,第n个元素右边的所有元素则大于第n个元素的值。注意在任意顺序中都不需要指定区域。Nth_element函数用于确定中间点或百分点。
       在根据某个条件对元素进行排序时,不是像nth_element函数那样对前n个元素排序,而是使用partion或stable_parition函数代替nth_element函数。这两个函数把容器分成两个区域,第一个区域包含满足特定条件的元素,第二个区域包含不满足特定条件的元素。最后,<algorithm>还包含merge和inplace_merge函数。但是,这两个函数都把已排序的区域作为参数,所以他们仅执行归并排序的一次调用。函数partition或stable_partition要求使用双向迭代器,而其他STL排序函数要求使用随机访问的迭代器。函数的规范如下所示。注意每个函数都有附加参数来确定排序的顺序,默认的比较运算符<。

                                                                                                                                           2014-08-01