std::sort

Header: <algorithm>

Sorts the elements in the range [first,last) in non-descending order. The order of equal elements is not guaranteed to be preserved.

# Declarations

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

(constexpr since C++20)

template< class ExecutionPolicy, class RandomIt >
void sort( ExecutionPolicy&& policy,
RandomIt first, RandomIt last );

(since C++17)

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

(constexpr since C++20)

template< class ExecutionPolicy, class RandomIt, class Compare >
void sort( ExecutionPolicy&& policy,
RandomIt first, RandomIt last, Compare comp );

(since C++17)

# Parameters

# Notes

Before LWG713, the complexity requirement allowed sort() to be implemented using only Quicksort, which may need (\scriptsize O(N^2))O(N2) comparisons in the worst case.

Introsort can handle all cases with (\scriptsize O(N \cdot \log(N)))O(N·log(N)) comparisons (without incurring additional overhead in the average case), and thus is usually used for implementing sort().

libc++ has not implemented the corrected time complexity requirement until LLVM 14.

# Example

#include <algorithm>
#include <array>
#include <functional>
#include <iostream>
#include <string_view>
 
int main()
{
    std::array<int, 10> s{5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
 
    auto print = [&s](std::string_view const rem)
    {
        for (auto a : s)
            std::cout << a << ' ';
        std::cout << ": " << rem << '\n';
    };
 
    std::sort(s.begin(), s.end());
    print("sorted with the default operator<");
 
    std::sort(s.begin(), s.end(), std::greater<int>());
    print("sorted with the standard library compare function object");
 
    struct
    {
        bool operator()(int a, int b) const { return a < b; }
    }
    customLess;
 
    std::sort(s.begin(), s.end(), customLess);
    print("sorted with a custom function object");
 
    std::sort(s.begin(), s.end(), [](int a, int b)
                                  {
                                      return a > b;
                                  });
    print("sorted with a lambda expression");
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 713C++98the (\scriptsize O(N \cdot \log(N)))O(N·log(N)) time complexity was only required on the averageit is required for the worst case

# See also