Алгоритм stable_sort()
template< class RandomAccessIterator > void stable_sort( RandomAccessIterator first, RandomAccessIterator last ); template< class RandomAccessIterator, class Compare > void stable_sort( RandomAccessIterator first, |
RandomAccessIterator last, Compare comp );
stable_sort()
ведет себя так же, как sort(), но гарантированно сохраняет относительный порядок равных элементов контейнера. Второй вариант упорядочивает элементы на основе заданной программистом операции сравнения comp.
#include <algorithm> #include <vector> #include <iostream.h> /* печатается: исходная последовательность: 29 23 20 22 12 17 15 26 51 19 12 23 35 40 устойчивая сортировка - по умолчанию в порядке возрастания: 12 12 15 17 19 20 22 23 23 26 29 35 40 51 устойчивая сортировка: в порядке убывания: 51 40 35 29 26 23 23 22 20 19 17 15 12 12 */
int main() { int ia[] = { 29,23,20,22,12,17,15,26,51,19,12,23,35,40 }; vector< int, allocator > vec( ia, ia+14 ); ostream_iterator< int > ofile( cout, " " ); cout << "исходная последовательность:\n"; copy( vec.begin(), vec.end(), ofile ); cout << '\n'; stable_sort( &ia[0], &ia[14] ); cout << "устойчивая сортировка - по умолчанию " << "в порядке возрастания:\n"; copy( ia, ia+14, ofile ); cout << '\n';
stable_sort( vec.begin(), vec.end(), greater<int>() ); cout << "устойчивая сортировка: в порядке убывания:\n"; copy( vec.begin(), vec.end(), ofile ); cout << '\n'; |
}