Salve non riesco a capire come funzioni questo algoritmo di ordinamento.
Prendo un compito del docente e provo a spiegarlo ma non riesco a capire alcuni passaggi.La prima domanda mi dice di ordinare gli articoli per valori alfabeticamente crescenti della categoria, e se hanno lo stesso valore li devo ordinare per valori del nome alfabeticamente crescenti.struct Articolo
{ char categoria;
char nome[MAXL];
float costo;
int numConf;
};
struct ScorteMagazzino {
Articolo scorte[MAXNUM];
int numAr;
};
Ecco la risposta del docente ma che non riesco a capire
void scambia(Articolo a[],int x,int y)
{ Articolo temp=a[x]; a[x]=a[y]; a[y]=temp;}
void ordina(ScorteMagazzino* s)
{ int ordinato=0; for(int i=0;i<s->numAr-1 && !ordinato;i++)
{ ordinato=1;
for(int j=s->numAr-1;j>=i+1;j--)
if((s->scorte[j].categoria<s->scorte[j-1].categoria)|| (s->scorte[j].categoria==s->scorte[j-1].categoria && strcmp(s->scorte[j].nome,s->scorte[j-1].nome)<0))
{
scambia(s->scorte,j,j-1);
ordinato=0; }
}
}
Non riesco a capire tre passaggi:
1) il perché della prima funzione ordina. Come vengono interpretati quegli array
2) quell'int ordinato all'inizio della funzione void . Perché lo dichiaro a 0 e poi gli do uno se risulta essere minore un articolo?
3) ma credo sia dovuta alla 1, la funzione scambia finale, anche qui non capisco come vengano elaborate j e j-1.
Grazie per le risposte.