I'm writing a program to print out all permutations of a given set of numbers in a random order i.e. if the user selects 3 then it should print: (0,1,2), (0,2,1), (1,0,2), (1,2,0), (2,0,1) and (2,1,0)
In my code I'm not getting all of the numbers that it's supposed to print. If I enter 3 I get: (2,1,2), (1,0,1),(0,1,0),(1,2,1),(2,1,2),(1,0,1)
Can anyone give me guidance on this algorithm? Thanks in advance...
Code:
#include <stdio.h>
int main()
{
// initialization of variables
int Choice, Number, Temp;
// counters
int index, j, k;
int Sets = 1;
printf("What number would you like to go to?\n");
scanf("%d", &Choice);
// initialize array after choice is made
int NumArray[Choice];
// zero out array
for(index=0; index<Choice; index++)
{
NumArray[index]=0;
}
// fill up array with numbers
for(index=0; index<Choice; index++)
{
Number = index;
NumArray[index] = Number;
}
// get number of sets
for(index=Choice; index>0; index--)
{
Sets = Sets * index;
}
// permutation algorithm
for(index=0; index<Sets; index++)
{
for(j=0; j<Choice; j++)
{
for(k=Choice; k>0; --k)
{
Temp = NumArray[j];
NumArray[j] = NumArray[k];
NumArray[k] = Temp;
}
printf("%d",Temp);
}
printf("\n");
}
printf("There are %d possible sets!\n", Sets);
return 0;
}