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>()); }