22#ifndef _ITERTOOLS_SORT_HPP
23#define _ITERTOOLS_SORT_HPP
56 template <std::forward_iterator ForwardIt,
class Compare = std::less<>>
57 std::size_t
bubble_sort(ForwardIt first, ForwardIt last, Compare comp = {}) {
58 if (first == last) {
return 0; }
59 std::size_t n_swaps = 0;
60 for (ForwardIt sorted = first; first != last; last = sorted) {
62 for (ForwardIt curr = first, prev = first; ++curr != last; ++prev) {
63 if (comp(*curr, *prev)) {
64 std::iter_swap(curr, prev);
91 template <std::b
idirectional_iterator B
idirIt,
class Compare = std::less<>>
93 if (first == last) {
return 0; }
94 std::size_t swaps = 0;
95 for (BidirIt i = std::next(first); i != last; ++i) {
96 for (BidirIt j = i; j != first && comp(*j, *std::prev(j)); --j) {
97 std::iter_swap(std::prev(j), j);
115 template <std::ranges::forward_range Range,
class Compare = std::less<>>
117 return bubble_sort(std::ranges::begin(rng), std::ranges::end(rng), comp);
131 template <std::ranges::b
idirectional_range Range,
class Compare = std::less<>>
133 return insertion_sort(std::ranges::begin(rng), std::ranges::end(rng), comp);
std::size_t bubble_sort(ForwardIt first, ForwardIt last, Compare comp={})
Bubble sort elements in the given range.
std::size_t insertion_sort(BidirIt first, BidirIt last, Compare comp={})
Insertion sort elements in the given range.