На этом шаге мы рассмотрим различия между алгоритмами sort() и stable_sort().
Следующая программа демонстрирует различия между алгоритмами sort() и stable_sort(). В ней оба алгоритма сортируют строки по количеству символов, используя критерий lessLength():
//--------------------------------------------------------------------------- #include <vcl.h> #include <iterator> #include "algostuff.hpp" #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } bool lessLength (const string& s1, const string& s2) { return s1.length() < s2.length(); } int main() { vector<string> coll1; vector<string> coll2; // Заполнение обеих коллекций одинаковыми элементами coll1.push_back ("1xxx"); coll1.push_back ("2x"); coll1.push_back ("3x"); coll1.push_back ("4x"); coll1.push_back ("5xx"); coll1.push_back ("6xxxx"); coll1.push_back ("7xx"); coll1.push_back ("8xxx"); coll1.push_back ("9xx"); coll1.push_back ("10xxx"); coll1.push_back ("11"); coll1.push_back ("12"); coll1.push_back ("13"); coll1.push_back ("14xx"); coll1.push_back ("15"); coll1.push_back ("16"); coll1.push_back ("17"); coll2 = coll1; PRINT_ELEMENTS(coll1,"Исходная коллекция:\n "); // Сортировка по длине строк sort (coll1.begin(), coll1.end(), // Интервал lessLength); // Критерий stable_sort (coll2.begin(), coll2.end(), // Интервал lessLength); // Критерий PRINT_ELEMENTS(coll1,"\nСортировка sort():\n "); PRINT_ELEMENTS(coll2,"\nСортировка stable_sort():\n "); getch(); return 0; } //---------------------------------------------------------------------------
Результат выполнения программы выглядит так:
Рис.1. Результат работы приложения
Только алгоритм stable_sort() сохраняет относительный порядок следования элементов (начальные числа определяют порядок следования элементов в исходном состоянии коллекции).
Со следующего шага мы начнем знакомиться с частичной сортировкой.