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

Перейти к навигации Перейти к поиску
Поправки к коду реализации на C
(Добавлена реализация на Java и пример её использования)
(Поправки к коду реализации на C)
/* Этап № 2 */
for (j = count; j > i && !(*compare)(sequence[i - 1], sequence[j - 1]); --j);
_swapItems(sequence, i - 1, j - 1);
--i;
_swapItems(sequence, i, j - 1);
/* Этап № 3 */
for (j = i + 1count; ji <= (countj +&& i) >>< 1--j; ++j) /* >> 1 — более быстрый вариант / 2 */
_swapItems(sequence, j, count + i -++, j);
return 1;
}
void initSequence (T *sequence, unsigned count) {
/* Заполнение последовательности значениями 1, 2, 3… */
for (unsigned i = count; i; --i)
for (i = count; i; --i)
sequence[i - 1] = i;
}
putchar('[');
if (count) { /* Если последовательность не пуста */
unsigned i;
printf("%d", sequence[0]);
for (unsigned i = 1; i < count; ++i)
printf(", %d", sequence[i]);
}
 
int main () {
unsigned count;
unsigned const count = 4; /* Длина последовательности. Может быть и любой другой */
scanf("%d", &count);
T *sequence = (T*)malloc(count * sizeof(T));
initSequence(sequence, count); /* Формирование исходной последовательности */
// Обмен значениями двух элементов последовательности
template < typename T >
static void _swap (T &value_0variable_0, T &value_1variable_1) {
T variable = variable_0;
T _ = value_0; // _ — временная переменная
value_0variable_0 = value_1variable_1;
value_1variable_1 = _variable;
}
// Поиск очередной перестановки
74

правки

Навигация