
The generic algorithm partial_sort() sorts only a portion of a sequence. In the first version of the algorithm, three iterators are used to describe the beginning, middle, and end of a sequence. If n represents the number of elements between the start and middle, then the smallest n elements are moved into this range in order. The remaining elements are moved into the second region. The order of the elements in this second region is undefined.
void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last [ , Compare ]);
A second version of the algorithm leaves the input unchanged. The output area is described by a pair of random access iterators. If n represents the size of this area, the smallest n elements in the input are moved into the output in order. If n is larger than the input, the entire input is sorted and placed in the first n locations in the output. In either case, the end of the output sequence is returned as the result of the operation.
RandomAccessIterator partial_sort_copy (InputIterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last [, Compare ] );
Because the input to this version of the algorithm is specified only as a pair of input iterators, the partial_sort_copy() algorithm can be used with any of the containers in the Standard C++ Library. In the example program, it is used with a list:
void partial_sort_example ()
// illustrates the use of the partial sort algorithm
// see alg7.cpp for complete source code
{
// make a vector of 15 random integers
vector<int> aVec(15);
generate (aVec.begin(), aVec.end(), randomValue);
// partial sort the first seven positions
partial_sort (aVec.begin(), aVec.begin() + 7, aVec.end());
// make a list of random integers
list<int> aList(15, 0);
generate (aList.begin(), aList.end(), randomValue);
// sort only the first seven elements
vector<int> start(7);
partial_sort_copy (aList.begin(), aList.end(),
start.begin(), start.end(), greater<int>());
}