Se non chiarisci cosa intende con scambio virtuale e scambio fisico, e' difficile risponderti. D'altra parte, di sicuro noi a lezione non c'eravamo...
Una possibile interpretazione:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct struttura {
char stringa[31];
int len;
} elemento;
void inizializza_array(elemento **e, int len)
{
int i;
for (i = 0; i < len; ++i) {
int l = 1 + rand()%30;
e[i] = malloc(sizeof(elemento));
e[i]->len = l;
memset(e[i]->stringa, 'A', l);
e[i]->stringa[l] = '\0';
}
}
void scambio_virtuale (elemento **e, int i, int j)
{
elemento *tmp = e[i];
e[i] = e[j];
e[j] = tmp;
}
void scambio_fisico (elemento **e, int i, int j)
{
elemento tmp = *(e[i]);
*(e[i]) = *(e[j]);
*(e[j]) = tmp;
}
void ordina(elemento **e, int len)
{
int i, j;
for (i = 0; i < len-1; ++i) {
int min = i;
for (j = i+1; j < len; ++j)
if (e[j]->len < e[min]->len)
min = j;
scambio_virtuale(e, min, i);
/* scambio_fisico(e, min, i); */
}
}
void elimina_array(elemento **e, int len)
{
int i;
for (i = 0; i < len; ++i)
free(e[i]);
}
#define DIM 10
int main(void)
{
int i;
elemento *array[DIM];
srand(time(NULL));
inizializza_array(array, DIM);
puts("Prima della cura:");
for (i = 0; i < DIM; ++i)
puts(array[i]->stringa);
ordina(array, DIM);
puts("\nDopo la cura:");
for (i = 0; i < DIM; ++i)
puts(array[i]->stringa);
elimina_array(array, DIM);
return 0;
}