#include <stdio.h>
char *input_argv[] = { "prog.c", "12", "10", "17", "1", "22" }; // al posto di argv[]
int input_argc = sizeof (input_argv) / sizeof (input_argv[0]); // al posto di argc
void visualizza (int lista[], int dimensione)
{
int i;
for (i = 0; i < dimensione; i++)
{
printf ("%i ", lista[i]);
}
printf ("\n");
}
void permuta (int lista[], int a, int z, int dimensione)
{
int scambio;
int k;
// Se il segmento di array contiene almeno due elementi,
// si procede.
if ((z - a) >= 1)
{
// Inizia un ciclo di scambi tra l'ultimo elemento e
// uno degli altri contenuti nel segmento di array.
for (k = z; k >= a; k--)
{
// Scambia i valori.
scambio = lista[k];
lista[k] = lista[z];
lista[z] = scambio;
// Esegue una chiamata ricorsiva per permutare
// un segmento piĆ¹ piccolo dell'array.
permuta (lista, a, z - 1, dimensione);
// Scambia i valori.
scambio = lista[k];
lista[k] = lista[z];
lista[z] = scambio;
}
}
else
{
// Visualizza l'array.
visualizza (lista, dimensione);
}
}
int
main (int argc, char *argv[])
{
int lista[input_argc - 1];
int i;
// Considera gli argomenti come gli elementi
// dell'array da permutare.
for (i = 1; i < input_argc; i++)
{
sscanf (input_argv[i], "%i", &lista[i-1]);
}
// Esegue le permutazioni.
permuta (lista, 0, input_argc - 2, input_argc - 1);
return 0;
}