Реализации алгоритмов/Алгоритм Нарайаны: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Поправки к коду реализаций
Строка 27:
 
/* narayana.c */
#include "narayana.h"
 
 
/* Обмен значениями двух элементов последовательности */
static void _swapItems (T *sequence, unsigned index_1, unsigned index_2) {
Строка 110 ⟶ 113 :
 
==[[w:C++|C++]]==
Для C++11 или более позднего стандарта. На основе итераторов.
<source lang="cpp">
// narayana.hpp
namespace Narayana {
// Обмен значениями двух элементов последовательности
template < typename IteratorT >
static void _swapItems_swap (IteratorT iterator_1&value_0, IteratorT iterator_2&value_1) {
autoT _ = *iterator_1value_0; // _ — временная переменная
*iterator_1value_0 = *iterator_2value_1;
*iterator_2value_1 = _;
}
// Поиск очередной перестановки
Строка 135 ⟶ 138 :
j = end;
while (j != i && !(*compare)(*i, *--j));
_swapItems_swap(*i, *j);
// Этап № 3
++i;
j = end;
for ( ; (i != j) && (i != --j); ++i)
_swapItems_swap(*i, *j);
return true;
}
Строка 152 ⟶ 155 :
 
#include "narayana.hpp"
 
 
// Возвращает true, если value_0 меньше value_1, иначе — false
Строка 169 ⟶ 173 :
if (begin != end) {
std::cout << *begin;
for (autoIterator current = begin; ++current != end; )
((std::cout << ',') << ' ') << *current;
}