Sorting Algorithms
[Algorithms]

Collaboration diagram for Sorting Algorithms:

Modules

Functions


Function Documentation

template<typename _BidirectionalIterator , typename _Compare >
void std::inplace_merge ( _BidirectionalIterator  __first,
_BidirectionalIterator  __middle,
_BidirectionalIterator  __last,
_Compare  __comp 
) [inline]

Merges two sorted ranges in place.

Parameters:
first An iterator.
middle Another iterator.
last Another iterator.
comp A functor to use for comparisons.
Returns:
Nothing.
Merges two sorted and consecutive ranges, [first,middle) and [middle,last), and puts the result in [first,last). The output will be sorted. The sort is stable, that is, for equivalent elements in the two ranges, elements from the first range will always come before elements from the second.

If enough additional memory is available, this takes (last-first)-1 comparisons. Otherwise an NlogN algorithm is used, where N is distance(first,last).

The comparison function should have the same effects on ordering as the function used for the initial sort.

Definition at line 3185 of file stl_algo.h.

References std::__merge_adaptive(), std::__merge_without_buffer(), std::_Temporary_buffer< _ForwardIterator, _Tp >::begin(), std::distance(), and std::_Temporary_buffer< _ForwardIterator, _Tp >::size().

template<typename _BidirectionalIterator >
void std::inplace_merge ( _BidirectionalIterator  __first,
_BidirectionalIterator  __middle,
_BidirectionalIterator  __last 
) [inline]

Merges two sorted ranges in place.

Parameters:
first An iterator.
middle Another iterator.
last Another iterator.
Returns:
Nothing.
Merges two sorted and consecutive ranges, [first,middle) and [middle,last), and puts the result in [first,last). The output will be sorted. The sort is stable, that is, for equivalent elements in the two ranges, elements from the first range will always come before elements from the second.

If enough additional memory is available, this takes (last-first)-1 comparisons. Otherwise an NlogN algorithm is used, where N is distance(first,last).

Definition at line 3130 of file stl_algo.h.

References std::__merge_adaptive(), std::__merge_without_buffer(), std::_Temporary_buffer< _ForwardIterator, _Tp >::begin(), std::distance(), and std::_Temporary_buffer< _ForwardIterator, _Tp >::size().

template<typename _ForwardIterator , typename _Compare >
bool std::is_sorted ( _ForwardIterator  __first,
_ForwardIterator  __last,
_Compare  __comp 
) [inline]

Determines whether the elements of a sequence are sorted according to a comparison functor.

Parameters:
first An iterator.
last Another iterator.
comp A comparison functor.
Returns:
True if the elements are sorted, false otherwise.

Definition at line 3886 of file stl_algo.h.

References std::is_sorted_until().

template<typename _ForwardIterator >
bool std::is_sorted ( _ForwardIterator  __first,
_ForwardIterator  __last 
) [inline]

Determines whether the elements of a sequence are sorted.

Parameters:
first An iterator.
last Another iterator.
Returns:
True if the elements are sorted, false otherwise.

Definition at line 3872 of file stl_algo.h.

References std::is_sorted_until().

template<typename _ForwardIterator , typename _Compare >
_ForwardIterator std::is_sorted_until ( _ForwardIterator  __first,
_ForwardIterator  __last,
_Compare  __comp 
) [inline]

Determines the end of a sorted sequence using comparison functor.

Parameters:
first An iterator.
last Another iterator.
comp A comparison functor.
Returns:
An iterator pointing to the last iterator i in [first, last) for which the range [first, i) is sorted.

Definition at line 3929 of file stl_algo.h.

Referenced by std::is_sorted().

template<typename _ForwardIterator >
_ForwardIterator std::is_sorted_until ( _ForwardIterator  __first,
_ForwardIterator  __last 
) [inline]

Determines the end of a sorted sequence.

Parameters:
first An iterator.
last Another iterator.
Returns:
An iterator pointing to the last iterator i in [first, last) for which the range [first, i) is sorted.

Definition at line 3900 of file stl_algo.h.

template<typename _II1 , typename _II2 , typename _Compare >
bool std::lexicographical_compare ( _II1  __first1,
_II1  __last1,
_II2  __first2,
_II2  __last2,
_Compare  __comp 
) [inline]

Performs "dictionary" comparison on ranges.

Parameters:
first1 An input iterator.
last1 An input iterator.
first2 An input iterator.
last2 An input iterator.
comp A comparison functor.
Returns:
A boolean true or false.
The same as the four-parameter lexicographical_compare, but uses the comp parameter instead of <.

Definition at line 1050 of file stl_algobase.h.

Referenced by std::operator<().

template<typename _II1 , typename _II2 >
bool std::lexicographical_compare ( _II1  __first1,
_II1  __last1,
_II2  __first2,
_II2  __last2 
) [inline]

Performs "dictionary" comparison on ranges.

Parameters:
first1 An input iterator.
last1 An input iterator.
first2 An input iterator.
last2 An input iterator.
Returns:
A boolean true or false.
"Returns true if the sequence of elements defined by the range [first1,last1) is lexicographically less than the sequence of elements defined by the range [first2,last2). Returns false otherwise." (Quoted from [25.3.8]/1.) If the iterators are all character pointers, then this is an inline call to memcmp.

Definition at line 1015 of file stl_algobase.h.

template<typename _Tp , typename _Compare >
const _Tp & std::max ( const _Tp &  __a,
const _Tp &  __b,
_Compare  __comp 
) [inline]

This does what you think it does.

Parameters:
a A thing of arbitrary type.
b Another thing of arbitrary type.
comp A comparison functor.
Returns:
The greater of the parameters.
This will work on temporary expressions, since they are only evaluated once, unlike a preprocessor macro.

Definition at line 253 of file stl_algobase.h.

References std::max().

template<typename _Tp >
const _Tp & std::max ( const _Tp &  __a,
const _Tp &  __b 
) [inline]

This does what you think it does.

Parameters:
a A thing of arbitrary type.
b Another thing of arbitrary type.
Returns:
The greater of the parameters.
This is the simple classic generic implementation. It will work on temporary expressions, since they are only evaluated once, unlike a preprocessor macro.

Definition at line 209 of file stl_algobase.h.

References std::max().

Referenced by std::tr1::__detail::__bessel_jn(), std::tr1::__detail::__ellint_rc(), std::tr1::__detail::__ellint_rd(), std::tr1::__detail::__ellint_rf(), std::tr1::__detail::__ellint_rj(), std::_Deque_base< _Tp, _Alloc >::_M_initialize_map(), std::deque< _Tp, _Alloc >::_M_reallocate_map(), std::max(), std::binomial_distribution< _IntType, _RealType >::operator()(), std::poisson_distribution< _IntType, _RealType >::operator()(), and std::basic_stringbuf< _CharT, _Traits, _Alloc >::overflow().

template<typename _ForwardIterator , typename _Compare >
_ForwardIterator std::max_element ( _ForwardIterator  __first,
_ForwardIterator  __last,
_Compare  __comp 
) [inline]

Return the maximum element in a range using comparison functor.

Parameters:
first Start of range.
last End of range.
comp Comparison functor.
Returns:
Iterator referencing the first instance of the largest value according to comp.

Definition at line 6070 of file stl_algo.h.

Referenced by std::valarray< _Tp >::max().

template<typename _ForwardIterator >
_ForwardIterator std::max_element ( _ForwardIterator  __first,
_ForwardIterator  __last 
) [inline]

Return the maximum element in a range.

Parameters:
first Start of range.
last End of range.
Returns:
Iterator referencing the first instance of the largest value.

Definition at line 6042 of file stl_algo.h.

template<typename _InputIterator1 , typename _InputIterator2 , typename _OutputIterator , typename _Compare >
_OutputIterator std::merge ( _InputIterator1  __first1,
_InputIterator1  __last1,
_InputIterator2  __first2,
_InputIterator2  __last2,
_OutputIterator  __result,
_Compare  __comp 
) [inline]

Merges two sorted ranges.

Parameters:
first1 An iterator.
first2 Another iterator.
last1 Another iterator.
last2 Another iterator.
result An iterator pointing to the end of the merged range.
comp A functor to use for comparisons.
Returns:
An iterator pointing to the first element "not less than" val.
Merges the ranges [first1,last1) and [first2,last2) into the sorted range [result, result + (last1-first1) + (last2-first2)). Both input ranges must be sorted, and the output range must not overlap with either of the input ranges. The sort is stable, that is, for equivalent elements in the two ranges, elements from the first range will always come before elements from the second.

The comparison function should have the same effects on ordering as the function used for the initial sort.

Definition at line 5348 of file stl_algo.h.

Referenced by std::__merge_adaptive().

template<typename _InputIterator1 , typename _InputIterator2 , typename _OutputIterator >
_OutputIterator std::merge ( _InputIterator1  __first1,
_InputIterator1  __last1,
_InputIterator2  __first2,
_InputIterator2  __last2,
_OutputIterator  __result 
) [inline]

Merges two sorted ranges.

Parameters:
first1 An iterator.
first2 Another iterator.
last1 Another iterator.
last2 Another iterator.
result An iterator pointing to the end of the merged range.
Returns:
An iterator pointing to the first element "not less than" val.
Merges the ranges [first1,last1) and [first2,last2) into the sorted range [result, result + (last1-first1) + (last2-first2)). Both input ranges must be sorted, and the output range must not overlap with either of the input ranges. The sort is stable, that is, for equivalent elements in the two ranges, elements from the first range will always come before elements from the second.

Definition at line 5285 of file stl_algo.h.

template<typename _Tp , typename _Compare >
const _Tp & std::min ( const _Tp &  __a,
const _Tp &  __b,
_Compare  __comp 
) [inline]

This does what you think it does.

Parameters:
a A thing of arbitrary type.
b Another thing of arbitrary type.
comp A comparison functor.
Returns:
The lesser of the parameters.
This will work on temporary expressions, since they are only evaluated once, unlike a preprocessor macro.

Definition at line 232 of file stl_algobase.h.

References std::min().

template<typename _Tp >
const _Tp & std::min ( const _Tp &  __a,
const _Tp &  __b 
) [inline]

template<typename _ForwardIterator , typename _Compare >
_ForwardIterator std::min_element ( _ForwardIterator  __first,
_ForwardIterator  __last,
_Compare  __comp 
) [inline]

Return the minimum element in a range using comparison functor.

Parameters:
first Start of range.
last End of range.
comp Comparison functor.
Returns:
Iterator referencing the first instance of the smallest value according to comp.

Definition at line 6014 of file stl_algo.h.

Referenced by std::valarray< _Tp >::min().

template<typename _ForwardIterator >
_ForwardIterator std::min_element ( _ForwardIterator  __first,
_ForwardIterator  __last 
) [inline]

Return the minimum element in a range.

Parameters:
first Start of range.
last End of range.
Returns:
Iterator referencing the first instance of the smallest value.

Definition at line 5986 of file stl_algo.h.

template<typename _Tp , typename _Compare >
pair< const _Tp &, const _Tp & > std::minmax ( const _Tp &  __a,
const _Tp &  __b,
_Compare  __comp 
) [inline]

Determines min and max at once as an ordered pair.

Parameters:
a A thing of arbitrary type.
b Another thing of arbitrary type.
comp A comparison functor.
Returns:
A pair(b, a) if b is smaller than a, pair(a, b) otherwise.

Definition at line 3977 of file stl_algo.h.

References std::minmax().

template<typename _Tp >
pair< const _Tp &, const _Tp & > std::minmax ( const _Tp &  __a,
const _Tp &  __b 
) [inline]

Determines min and max at once as an ordered pair.

Parameters:
a A thing of arbitrary type.
b Another thing of arbitrary type.
Returns:
A pair(b, a) if b is smaller than a, pair(a, b) otherwise.

Definition at line 3958 of file stl_algo.h.

References std::minmax().

Referenced by std::minmax().

template<typename _ForwardIterator , typename _Compare >
pair<_ForwardIterator, _ForwardIterator> std::minmax_element ( _ForwardIterator  __first,
_ForwardIterator  __last,
_Compare  __comp 
) [inline]

Return a pair of iterators pointing to the minimum and maximum elements in a range.

Parameters:
first Start of range.
last End of range.
comp Comparison functor.
Returns:
make_pair(m, M), where m is the first iterator i in [first, last) such that no other element in the range is smaller, and where M is the last iterator i in [first, last) such that no other element in the range is larger.

Definition at line 4072 of file stl_algo.h.

template<typename _ForwardIterator >
pair<_ForwardIterator, _ForwardIterator> std::minmax_element ( _ForwardIterator  __first,
_ForwardIterator  __last 
) [inline]

Return a pair of iterators pointing to the minimum and maximum elements in a range.

Parameters:
first Start of range.
last End of range.
Returns:
make_pair(m, M), where m is the first iterator i in [first, last) such that no other element in the range is smaller, and where M is the last iterator i in [first, last) such that no other element in the range is larger.

Definition at line 3996 of file stl_algo.h.

template<typename _BidirectionalIterator , typename _Compare >
bool std::next_permutation ( _BidirectionalIterator  __first,
_BidirectionalIterator  __last,
_Compare  __comp 
) [inline]

Permute range into the next "dictionary" ordering using comparison functor.

Parameters:
first Start of range.
last End of range.
comp A comparison functor.
Returns:
False if wrapped to first permutation, true otherwise.
Treats all permutations of the range [first,last) as a set of "dictionary" sorted sequences ordered by comp. Permutes the current sequence into the next one of this set. Returns true if there are more sequences to generate. If the sequence is the largest of the set, the smallest is generated and false returned.

Definition at line 3631 of file stl_algo.h.

References std::iter_swap(), and std::reverse().

template<typename _BidirectionalIterator >
bool std::next_permutation ( _BidirectionalIterator  __first,
_BidirectionalIterator  __last 
) [inline]

Permute range into the next "dictionary" ordering.

Parameters:
first Start of range.
last End of range.
Returns:
False if wrapped to first permutation, true otherwise.
Treats all permutations of the range as a set of "dictionary" sorted sequences. Permutes the current sequence into the next one of this set. Returns true if there are more sequences to generate. If the sequence is the largest of the set, the smallest is generated and false returned.

Definition at line 3574 of file stl_algo.h.

References std::iter_swap(), and std::reverse().

template<typename _RandomAccessIterator , typename _Compare >
void std::nth_element ( _RandomAccessIterator  __first,
_RandomAccessIterator  __nth,
_RandomAccessIterator  __last,
_Compare  __comp 
) [inline]

Sort a sequence just enough to find a particular position using a predicate for comparison.

Parameters:
first An iterator.
nth Another iterator.
last Another iterator.
comp A comparison functor.
Returns:
Nothing.
Rearranges the elements in the range [first,last) so that *nth is the same element that would have been in that position had the whole sequence been sorted. The elements either side of *nth are not completely sorted, but for any iterator in the range [first,nth) and any iterator in the range [nth,last) it holds that comp(*j,*i) is false.

Definition at line 5169 of file stl_algo.h.

References std::__lg().

template<typename _RandomAccessIterator >
void std::nth_element ( _RandomAccessIterator  __first,
_RandomAccessIterator  __nth,
_RandomAccessIterator  __last 
) [inline]

Sort a sequence just enough to find a particular position.

Parameters:
first An iterator.
nth Another iterator.
last Another iterator.
Returns:
Nothing.
Rearranges the elements in the range [first,last) so that *nth is the same element that would have been in that position had the whole sequence been sorted. whole sequence been sorted. The elements either side of *nth are not completely sorted, but for any iterator in the range [first,nth) and any iterator in the range [nth,last) it holds that *j<*i is false.

Definition at line 5130 of file stl_algo.h.

References std::__lg().

template<typename _RandomAccessIterator , typename _Compare >
void std::partial_sort ( _RandomAccessIterator  __first,
_RandomAccessIterator  __middle,
_RandomAccessIterator  __last,
_Compare  __comp 
) [inline]

Sort the smallest elements of a sequence using a predicate for comparison.

Parameters:
first An iterator.
middle Another iterator.
last Another iterator.
comp A comparison functor.
Returns:
Nothing.
Sorts the smallest (middle-first) elements in the range [first,last) and moves them to the range [first,middle). The order of the remaining elements in the range [middle,last) is undefined. After the sort if i and are iterators in the range [first,middle) such that precedes and is an iterator in the range [middle,last) then *comp(j,*i) and comp(*k,*i) are both false.

Definition at line 5092 of file stl_algo.h.

References std::__heap_select(), and std::sort_heap().

Referenced by std::__introsort_loop().

template<typename _RandomAccessIterator >
void std::partial_sort ( _RandomAccessIterator  __first,
_RandomAccessIterator  __middle,
_RandomAccessIterator  __last 
) [inline]

Sort the smallest elements of a sequence.

Parameters:
first An iterator.
middle Another iterator.
last Another iterator.
Returns:
Nothing.
Sorts the smallest (middle-first) elements in the range [first,last) and moves them to the range [first,middle). The order of the remaining elements in the range [middle,last) is undefined. After the sort if i and are iterators in the range [first,middle) such that precedes and is an iterator in the range [middle,last) then *j<*i and *k<*i are both false.

Definition at line 5053 of file stl_algo.h.

References std::__heap_select(), and std::sort_heap().

template<typename _InputIterator , typename _RandomAccessIterator , typename _Compare >
_RandomAccessIterator std::partial_sort_copy ( _InputIterator  __first,
_InputIterator  __last,
_RandomAccessIterator  __result_first,
_RandomAccessIterator  __result_last,
_Compare  __comp 
) [inline]

Copy the smallest elements of a sequence using a predicate for comparison.

Parameters:
first An input iterator.
last Another input iterator.
result_first A random-access iterator.
result_last Another random-access iterator.
comp A comparison functor.
Returns:
An iterator indicating the end of the resulting sequence.
Copies and sorts the smallest N values from the range [first,last) to the range beginning at result_first, where the number of elements to be copied, N, is the smaller of (last-first) and (result_last-result_first). After the sort if i and are iterators in the range [result_first,result_first+N) such that precedes then comp(*j,*i) is false. The value returned is result_first+N.

Definition at line 2011 of file stl_algo.h.

References std::make_heap(), and std::sort_heap().

template<typename _InputIterator , typename _RandomAccessIterator >
_RandomAccessIterator std::partial_sort_copy ( _InputIterator  __first,
_InputIterator  __last,
_RandomAccessIterator  __result_first,
_RandomAccessIterator  __result_last 
) [inline]

Copy the smallest elements of a sequence.

Parameters:
first An iterator.
last Another iterator.
result_first A random-access iterator.
result_last Another random-access iterator.
Returns:
An iterator indicating the end of the resulting sequence.
Copies and sorts the smallest N values from the range [first,last) to the range beginning at result_first, where the number of elements to be copied, N, is the smaller of (last-first) and (result_last-result_first). After the sort if i and are iterators in the range [result_first,result_first+N) such that precedes then *j<*i is false. The value returned is result_first+N.

Definition at line 1945 of file stl_algo.h.

References std::make_heap(), and std::sort_heap().

template<typename _BidirectionalIterator , typename _Compare >
bool std::prev_permutation ( _BidirectionalIterator  __first,
_BidirectionalIterator  __last,
_Compare  __comp 
) [inline]

Permute range into the previous "dictionary" ordering using comparison functor.

Parameters:
first Start of range.
last End of range.
comp A comparison functor.
Returns:
False if wrapped to last permutation, true otherwise.
Treats all permutations of the range [first,last) as a set of "dictionary" sorted sequences ordered by comp. Permutes the current sequence into the previous one of this set. Returns true if there are more sequences to generate. If the sequence is the smallest of the set, the largest is generated and false returned.

Definition at line 3744 of file stl_algo.h.

References std::iter_swap(), and std::reverse().

template<typename _BidirectionalIterator >
bool std::prev_permutation ( _BidirectionalIterator  __first,
_BidirectionalIterator  __last 
) [inline]

Permute range into the previous "dictionary" ordering.

Parameters:
first Start of range.
last End of range.
Returns:
False if wrapped to last permutation, true otherwise.
Treats all permutations of the range as a set of "dictionary" sorted sequences. Permutes the current sequence into the previous one of this set. Returns true if there are more sequences to generate. If the sequence is the smallest of the set, the largest is generated and false returned.

Definition at line 3687 of file stl_algo.h.

References std::iter_swap(), and std::reverse().

template<typename _RandomAccessIterator , typename _Compare >
void std::sort ( _RandomAccessIterator  __first,
_RandomAccessIterator  __last,
_Compare  __comp 
) [inline]

Sort the elements of a sequence using a predicate for comparison.

Parameters:
first An iterator.
last Another iterator.
comp A comparison functor.
Returns:
Nothing.
Sorts the elements in the range [first,last) in ascending order, such that comp(*(i+1),*i) is false for every iterator i in the range [first,last-1).

The relative ordering of equivalent elements is not preserved, use stable_sort() if this is needed.

Definition at line 5243 of file stl_algo.h.

References std::__final_insertion_sort(), std::__introsort_loop(), and std::__lg().

template<typename _RandomAccessIterator >
void std::sort ( _RandomAccessIterator  __first,
_RandomAccessIterator  __last 
) [inline]

Sort the elements of a sequence.

Parameters:
first An iterator.
last Another iterator.
Returns:
Nothing.
Sorts the elements in the range [first,last) in ascending order, such that *(i+1)<*i is false for each iterator i in the range [first,last-1).

The relative ordering of equivalent elements is not preserved, use stable_sort() if this is needed.

Definition at line 5207 of file stl_algo.h.

References std::__final_insertion_sort(), std::__introsort_loop(), and std::__lg().

template<typename _RandomAccessIterator , typename _Compare >
void std::stable_sort ( _RandomAccessIterator  __first,
_RandomAccessIterator  __last,
_Compare  __comp 
) [inline]

Sort the elements of a sequence using a predicate for comparison, preserving the relative order of equivalent elements.

Parameters:
first An iterator.
last Another iterator.
comp A comparison functor.
Returns:
Nothing.
Sorts the elements in the range [first,last) in ascending order, such that comp(*(i+1),*i) is false for each iterator i in the range [first,last-1).

The relative ordering of equivalent elements is preserved, so any two elements x and y in the range [first,last) such that comp(x,y) is false and comp(y,x) is false will have the same relative ordering after calling stable_sort().

Definition at line 5449 of file stl_algo.h.

References std::__inplace_stable_sort(), std::_Temporary_buffer< _ForwardIterator, _Tp >::begin(), and std::_Temporary_buffer< _ForwardIterator, _Tp >::size().

template<typename _RandomAccessIterator >
void std::stable_sort ( _RandomAccessIterator  __first,
_RandomAccessIterator  __last 
) [inline]

Sort the elements of a sequence, preserving the relative order of equivalent elements.

Parameters:
first An iterator.
last Another iterator.
Returns:
Nothing.
Sorts the elements in the range [first,last) in ascending order, such that *(i+1)<*i is false for each iterator i in the range [first,last-1).

The relative ordering of equivalent elements is preserved, so any two elements x and y in the range [first,last) such that x<y is false and y<x is false will have the same relative ordering after calling stable_sort().

Definition at line 5407 of file stl_algo.h.

References std::__inplace_stable_sort(), std::_Temporary_buffer< _ForwardIterator, _Tp >::begin(), and std::_Temporary_buffer< _ForwardIterator, _Tp >::size().


Generated on Thu Jul 23 21:16:43 2009 for libstdc++ by  doxygen 1.5.8