Fix to permutations.c
This commit is contained in:
parent
83fcf178a9
commit
cf685d6a91
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue