I have forgotten

• https://me.yahoo.com

# partial_sort

Sorts until the first n elements are correct

## Definition

The partial_sort() algorithm is defined in the standard header <algorithm> and in the nonstandard backward-compatibility header <algo.h>.

## Interface

```#include <algorithm>
template < class RandomAccessIterator >
void partial_sort(
RandomAccessIterator first,
RandomAccessIterator sortEnd,
RandomAccessIterator last
);
template < class RandomAccessIterator, class BinaryPredicate >
void partial_sort(
RandomAccessIterator first,
RandomAccessIterator sortEnd,
RandomAccessIterator last
BinaryPredicate comp
);```

Parameters:
Parameter Description
first A random-access iterator addressing the position of the first element in the range to be sorted
last A random-access iterator addressing the position one past the final element in the range to be partially sorted
sortEnd A random-access iterator addressing the position one past the final element in the sub-range to be sorted
comp User-defined predicate function object that defines the comparison criterion to be satisfied by successive elements in the ordering. A binary predicate takes two arguments and returns `true` when satisfied and `false` when not satisfied

## Description

Partial_sort algorithm partially sorts a range. After calling this function, the elements between `fi rst` and `sortEnd` will be sorted and the elements between `sortEnd` and `last` will be in an unspeci ed order.

This function sorts a range of size `sortEnd - first` by taking its elements between `first` and `last`.

The first version compares objects using `operator<`, and the second compares objects using a function object `comp`.

None.

## Complexity

This algorithm performs approximately `(last - first) * log(sortEnd - first)` comparisons.

### References

Example:

##### Example - partial_sort function
Problem
This program illustrates the use of the STL partial_sort() algorithm (default version) to partially sort a vector of integers of size 12 by getting its 5 smallest values into ascending order at the beginning of the vector.

The following range of values may also be sorted (by chance), but the algorithm does not guarantee this, and you should not expect it.
Workings
```#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
int a[] = {10,  2,  6, 11,  9,  3, 4, 12,  8,  7,  1,  5};
vector<int> v(a, a+12);
cout <<"\nHere are the initial contents of the vector:\n";
for (vector<int>::size_type i=0; i<v.size(); i++)
cout <<v.at(i)<<" ";

cout <<"\nNow we make the following call:";
cout <<"\npartial_sort(v.begin(), v.begin()+5, v.end());";
partial_sort(v.begin(), v.begin()+5, v.end());

cout <<"\nAnd here are the (partially sorted) contents of the "
"vector,\nup to and including its 5th element:\n";
for (vector<int>::size_type i=0; i<v.size(); i++)
cout <<v.at(i)<<" ";

return 0;
}```
Solution
Output:

Here are the initial contents of the vector:
10 2 6 11 9 3 4 12 8 7 1 5

Now we make the following call:
partial_sort(v.begin(), v.begin()+5, v.end());

And here are the (partially sorted) contents of the vector,
up to and including its 5th element:
1 2 3 4 5 11 10 12 9 8 7 6
References