I have forgotten
my Password

Or login with:

  • Facebookhttp://facebook.com/
  • Googlehttps://www.google.com/accounts/o8/id
  • Yahoohttps://me.yahoo.com
ComputingStlAlgorithmsSorting

partial_sort

Sorts until the first n elements are correct
+ View other versions (2)

Key Facts

Gyroscopic Couple: The rate of change of angular momentum (\inline \tau) = \inline I\omega\Omega (In the limit).
  • \inline I = Moment of Inertia.
  • \inline \omega = Angular velocity
  • \inline \Omega = 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 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.

Return Value

None.

Complexity

This algorithm performs approximately (last - first) * log(sortEnd - first) comparisons.
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