Ежедневен бит(е) на C++ #193, каноничният алгоритъм за сортиране: std::sort.

std::sort е може би един от най-известните алгоритми.

Алгоритъмът сортира елементи (по подразбиране в ненизходящ ред) и не поддържа относителния ред на еквивалентните елементи.

Стандартът C++17 добави паралелен вариант.
Стандартът C++20 добави версия на диапазон и активира оценка на constexpr за всички варианти освен за паралелния.

#include <algorithm>
#include <vector>
#include <execution>


std::vector<int> data{9,2,6,4,3,5,1,7,8};

// Default sort using operator<
std::sort(data.begin(), data.end());
// data == {1,2,3,4,5,6,7,8,9}

// Sort with custom comparator
std::sort(data.begin(), data.end(), std::greater<>{});
// data == {9,8,7,6,5,4,3,2,1}

// Same as above, but using a lambda
std::sort(data.begin(), data.end(), 
          [](int l, int r) { return l > r; });
// data == {9,8,7,6,5,4,3,2,1}

// C++17 parallel version
std::sort(std::execution::par_unseq, data.begin(), data.end());
// data == {1,2,3,4,5,6,7,8,9}

// C++20 range version
// Note: default comparator is std::ranges::less{}, not operator<
std::ranges::sort(data, std::ranges::greater{});
// data == {9,8,7,6,5,4,3,2,1}

struct Item {
    int id;
    std::string label;
};
std::vector<Item> words{{9, "bench"}, {2, "rain"}, {0, "reasonable"},
                        {5, "fool"}, {3, "waist"}, {7, "insure"}};

// Sort lexicographically by label.
std::ranges::sort(words, {}, &Item::label);
// std::ranges::sort(words, std::ranges::less{}, &Item::label);

// {9:"bench", 5:"fool", 7:"insure", 
//  2:"rain", 0:"reasonable", 3:"waist"}

// Sort by id, non-ascending
std::ranges::sort(words, std::ranges::greater{}, &Item::id);
// {9:"bench", 7:"insure", 5:"fool", 
//  3:"waist", 2:"rain", 0:"reasonable"}

Отворете примера в Compiler Explorer.