# partial_sort

Sorts until the first n elements are correct

### Key Facts

**Gyroscopic Couple**: The rate of change of angular momentum () = (In the limit).

- = Moment of Inertia.
- = Angular velocity
- = Angular velocity of precession.

**Blaise Pascal**(1623-1662) was a French mathematician, physicist, inventor, writer and Catholic philosopher.

**Leonhard Euler**(1707-1783) was a pioneering Swiss mathematician and physicist.

## 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

`first`

and `sortEnd`

will be sorted and the elements between `sortEnd`

and `last`

will be in an unspecied 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`

.### 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