1. template <class RandomAccessIterator>                                             
  2. inline void partial_sort(RandomAccessIterator first,                              
  3.                          RandomAccessIterator middle,                             
  4.                          RandomAccessIterator last) {                             
  5.     __partial_sort(first, middle, last, value_type(first));                       
 
  
  1. template <class RandomAccessIterator, class T>                                    
  2. void __partial_sort(RandomAccessIterator first,                                   
  3.                     RandomAccessIterator middle,                                  
  4.                     RandomAccessIterator last, T*) {                              
  5.     make_heap(first, middle);                                                
  6.     for(RandomAccessIterator i = middle; i != last; ++i)                          
  7.         if(*i < *first)                                                           
  8.             __pop_heap(first, middle, i);                                    
  9.     sort_heap(first, middle);                                                

从上述代码可以看出,partial_sort()函数借用heap进行部分排序。partial_sort()还有另外一版本,即partial_sort_copy(first1, last1, first2, last2),该函数的原理于partial_sort()相同,不过是将[first1, last1)中最小的(last2 - first2)个元素拷贝到[first2, last2)中。