stable_sort
在一个指定大小的元素到一个nondescending的顺序或基于二进制谓词指定的一个排序的标准并保留相对顺序等效的元素。
template<class BidirectionalIterator>
void stable_sort(
BidirectionalIterator _First,
BidirectionalIterator _Last
);
template<class BidirectionalIterator, class BinaryPredicate>
void stable_sort(
BidirectionalIterator _First,
BidirectionalIterator _Last,
BinaryPredicate _Comp
);
参数
_First
解析一双向的迭代器第一个元素的位置在进行排序的大小。_Last
解析一双向的迭代器通过最终元素的位置一在进行排序的大小。_Comp
定义连续的元素将足够的比较条件顺序的用户定义的谓词函数对象。 二进制谓词采用两个参数并返回 true,在满足和 false,在未满足。
备注
引用的范围必须是有效的;所有指针必须dereferenceable,并在该序列中最后位置以访问按增量。
如果都比其他,不小于元素是等效的,但是,不一定相等。 排序算法是稳定的并确保相对顺序等效的元素将保留。
stable_sort 的运行时复杂取决于可用的内存量,但是,最好的情况(提供足够的内存)的运算复杂度为o(1)N log *N)*和最糟糕的情况是 O( N (log N ) 2),其中 N = *_Last –首先。*通常,排序算法比 stable_sort快很多。
示例
// alg_stable_sort.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional> // For greater<int>( )
#include <iostream>
// Return whether first element is greater than the second
bool UDgreater (int elem1, int elem2 )
{
return elem1 > elem2;
}
int main( )
{
using namespace std;
vector <int> v1;
vector <int>::iterator Iter1;
int i;
for ( i = 0 ; i <= 5 ; i++ )
{
v1.push_back( 2 * i );
}
for ( i = 0 ; i <= 5 ; i++ )
{
v1.push_back( 2 * i );
}
cout << "Original vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
stable_sort(v1.begin( ), v1.end( ) );
cout << "Sorted vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
// To sort in descending order, specify binary predicate
stable_sort(v1.begin( ), v1.end( ), greater<int>( ) );
cout << "Resorted (greater) vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
// A user-defined (UD) binary predicate can also be used
stable_sort(v1.begin( ), v1.end( ), UDgreater );
cout << "Resorted (UDgreater) vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
}
要求
标头: <algorithm>
命名空间: std