[section:partial_sort partial_sort]

[heading Prototype]

``
template<class RandomAccessRange>
RandomAccessRange& partial_sort(
    RandomAccessRange& rng,
    typename range_iterator<RandomAccessRange>::type middle);

template<class RandomAccessRange>
const RandomAccessRange& partial_sort(
    const RandomAccessRange& rng,
    typename range_iterator<const RandomAccessRange>::type middle);

template<class RandomAccessRange>
RandomAccessRange& partial_sort(
    RandomAccessRange& rng,
    typename range_iterator<RandomAccessRange>::type middle,
    BinaryPredicate sort_pred);

template<class RandomAccessRange>
const RandomAccessRange& partial_sort(
    const RandomAccessRange& rng,
    typename range_iterator<const RandomAccessRange>::type middle,
    BinaryPredicate sort_pred);
``

[heading Description]

`partial_sort` rearranges the elements in `rng`. It places the smallest `distance(begin(rng), middle)` elements, sorted in ascending order, into the range `[begin(rng), middle)`. The remaining elements are placed in an unspecified order into `[middle, last)`.

The non-predicative versions of this function specify that one element is less than another by using `operator<()`. The predicate versions use the predicate instead.


[heading Definition]

Defined in the header file `boost/range/algorithm/partial_sort.hpp`

[heading Requirements]

[*For the non-predicate version:]

* `RandomAccessRange` is a model of the __random_access_range__ Concept.
* `RandomAccessRange` is mutable.
* `RandomAccessRange`'s value type is a model of the `LessThanComparableConcept`.
* The ordering relation on `RandomAccessRange`'s value type is a [*/strict weak ordering/], as defined in the `LessThanComparableConcept` requirements.


[*For the predicate version:]

* `RandomAccessRange` is a model of the __random_access_range__ Concept.
* `RandomAccessRange` is mutable.
* `BinaryPredicate` is a model of the `StrictWeakOrderingConcept`.
* `RandomAccessRange`'s value type is convertible to both of `BinaryPredicate`'s argument types.


[heading Complexity]

Approximately `distance(rng) * log(distance(begin(rng), middle))` comparisons.

[endsect]


