语法:
#include <algorithm> template <class RandomAccessIterator> void sort( RandomAccessIterator start, RandomAccessIterator end ); template <class RandomAccessIterator, class Compare> void sort( RandomAccessIterator start, RandomAccessIterator end, Compare cmp );
排序 sort
算法将[start,end)
范围内的元素排列成升序。如果两个元素相同,不能保证它们的顺序。
如果函数对象cmp
被给定,那么它将取代<
用来比较两个对象。cmp
应该产生从start
到end
严格的弱顺序。
注意sort
只对RandomAccessIterators操作。比如,你不能对list使用sort
;而应该使用list::sort。
start
and end
are RandomAccessIterators pointing to the range of elements to be sorted.
cmp
is an optional function object that is used in place of <
to perform comparisons between pairs of elements.
none
下面的代码将一组整数向量排列成升序:
std::vector<int> v; v.push_back( 23 ); v.push_back( -1 ); v.push_back( 9999 ); v.push_back( 0 ); v.push_back( 4 ); std::cout << "Before sorting: "; for( unsigned int i = 0; i < v.size(); i++ ) { std::cout << v[i] << " "; } std::cout << std::endl; std::sort( v.begin(), v.end() ); std::cout << "After sorting: "; for( unsigned int i = 0; i < v.size(); i++ ) { std::cout << v[i] << " "; } std::cout << std::endl;
When run, the above code displays this output:
Before sorting: 23 -1 9999 0 4 After sorting: -1 0 4 23 9999
Alternatively, the following code uses the sort
function to sort a normal
array of integers, and displays the same output as the previous example:
const unsigned int array_size = 5; int array[array_size] = { 23, -1, 9999, 0, 4 }; std::cout << "Before sorting: "; for( unsigned int i = 0; i < array_size; i++ ) { std::cout << array[i] << " "; } std::cout << endl; std::sort( array, array + array_size ); std::cout << "After sorting: "; for( unsigned int i = 0; i < array_size; i++ ) { std::cout << array[i] << " "; } std::cout << std::endl;
This next example shows how to use sort
with a user-specified comparison
function. The function cmp
is defined to do the opposite of the <
operator.
When sort
is called with cmp
used as the comparison function, the result is a
list sorted in descending, rather than ascending, order:
bool cmp( int a, int b ) { return a > b; } ... std::vector<int> v; for( int i = 0; i < 10; i++ ) { v.push_back(i); } std::cout << "Before: "; for( int i = 0; i < 10; i++ ) { std::cout << v[i] << " "; } std::cout << endl; std::sort( v.begin(), v.end(), cmp ); std::cout << "After: "; for( int i = 0; i < 10; i++ ) { std::cout << v[i] << " "; } std::cout << std::endl;
The algorithm behind sort
is the introsort algorithm. sort
runs in O(N log(N))
time (average and worst case) which is faster than polynomial time but slower than linear time.