Fix to permutations.c

This commit is contained in:
Miguel M 2023-04-29 16:52:47 +01:00
parent 83fcf178a9
commit cf685d6a91
1 changed files with 3 additions and 4 deletions

View File

@ -22,7 +22,7 @@ void PermutationReset(permutation_generator_t *permutation_generator)
size_t *stack = permutation_generator->stack;
// Initialize the permutation array and stack.
for (size_t i = 1; i < len; i++)
for (size_t i = 0; i < len; i++)
{
permutation[i] = i;
stack[i] = 0;
@ -35,15 +35,14 @@ void PermutationReset(permutation_generator_t *permutation_generator)
static void _PermutationNext(size_t * restrict permutation, size_t * restrict stack, size_t *stack_ptr, _Bool *exhausted, size_t len) {
repeat:
if (stack[*stack_ptr] < *stack_ptr) {
size_t tmp; // gcc is a good compiler :)
if (((*stack_ptr) & 1) == 0) { // Is even
// Swap A[0] and A[i]
tmp = permutation[0];
size_t tmp = permutation[0];
permutation[0] = permutation[*stack_ptr];
permutation[*stack_ptr] = tmp;
} else {
// Swap A[c[i]] and A[i]
tmp = permutation[*stack_ptr];
size_t tmp = permutation[*stack_ptr];
permutation[*stack_ptr] = permutation[stack[*stack_ptr]];
permutation[stack[*stack_ptr]] = tmp;
}