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