1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <stdio.h>
void perm(size_t size, int array[static size])
{
for(size_t i=0; i<size; ++i) {
if (array[i]<0)
continue;
size_t j=array[i];
size_t last=i;
do {
int tmp=array[j];
array[j]=-last-1;
last=j;
j=tmp;
} while (i!=j);
array[j] = -last-1;
}
for(size_t i=0; i<size; ++i)
array[i]=-array[i]-1;
}
void display(size_t size, int array[static size])
{
putchar('[');
for(size_t i=0; i<size; ++i)
printf(" %d", array[i]);
puts(" ]");
}
int main(void)
{
int disp[]={0,1,2,3,4,5,6};
int test[]={1,2,6,3,0,5,4};
size_t size=sizeof test/sizeof *test;
printf("Le nombre : ");
display(size, disp);
printf("va en : ");
display(size, test);
printf("résultat : ");
perm(size,test);
display(size, test);
return 0;
} |
Partager