Шаг 303.
Библиотека STL.
Алгоритмы STL. Алгоритмы сортировки. Сортировка всех элементов (окончание)

    На этом шаге мы рассмотрим различия между алгоритмами 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() сохраняет относительный порядок следования элементов (начальные числа определяют порядок следования элементов в исходном состоянии коллекции).

    Со следующего шага мы начнем знакомиться с частичной сортировкой.




Предыдущий шаг Содержание Следующий шаг