Entra

View Full Version : [C] Algoritmo ordinamento


Vincenzoflaminio
15-07-2010, 14:07
Salve , dovrei ordinare una struct ma non so come passarla nella function che ordina i parmetri.
Il mio problema sta nell 'ordinare in ordine decrescente di vittorie le squadre, e stamparne i nomi .
Avevo scritto questo codice che mi permette di ordinare le vottorie della squadra essendo solo un array ad entrare come argomento e copiando i dati strutturati in un array semplice:

struct _squadra
{
int numero /*nome della squadra identificata da un numero */;
int numvittoriesquadra;
};
typedef struct _squadra Squadra;

void order_ins (int array[], int n)
{
int i,j;
int el_da_ins;
j=j-i;
for (i=1;i<n;i++)
{
el_da_ins=array[i];
j= i-1;
while (j>=0 && el_da_ins < array[j])
{
array[j+1] = array[j];
j--;
}
array[j+1] = el_da_ins;
}

main
{
/*copio le vittorie in un array /*
for(i = 0; i <8; i++)
{ array_squadra[i].numvittoriesquadra = numvittoriesquadra[i];}
/* chiamata all'array
order_ins(numvittoriesquadra,lung_numvittorie);

Il problema è che quando vado a fare il printf ho ordinato le vittorie delle squadre ma non i nomi..:mad:

Rsk
15-07-2010, 18:05
Salve , dovrei ordinare una struct ma non so come passarla nella function che ordina i parmetri.
Il mio problema sta nell 'ordinare in ordine decrescente di vittorie le squadre, e stamparne i nomi .
Avevo scritto questo codice che mi permette di ordinare le vottorie della squadra essendo solo un array ad entrare come argomento e copiando i dati strutturati in un array semplice:

struct _squadra
{
int numero /*nome della squadra identificata da un numero */;
int numvittoriesquadra;
};
typedef struct _squadra Squadra;

void order_ins (int array[], int n)
{
int i,j;
int el_da_ins;
j=j-i;
for (i=1;i<n;i++)
{
el_da_ins=array[i];
j= i-1;
while (j>=0 && el_da_ins < array[j])
{
array[j+1] = array[j];
j--;
}
array[j+1] = el_da_ins;
}

main
{
/*copio le vittorie in un array /*
for(i = 0; i <8; i++)
{ array_squadra[i].numvittoriesquadra = numvittoriesquadra[i];}
/* chiamata all'array
order_ins(numvittoriesquadra,lung_numvittorie);

Il problema è che quando vado a fare il printf ho ordinato le vittorie delle squadre ma non i nomi..:mad:

Passi un puntatore a struttura

void sort( Squadra * s);

per accedere ai campi devi fare

int num = s->numero

Vincenzoflaminio
15-07-2010, 19:40
Grazie ! modificato il codice ora :

void order_ins (Squadra *s, int n)
{
int i,j;
int el_da_ins;
j=j-i;
for (i=1;i<n;i++)
{
el_da_ins=(s+i)->numvittoriesquadra;
j= i-1;
while (j>=0 && el_da_ins < (s+j)->numvittoriesquadra)
{
(s+j+1)->numvittoriesquadra = (s+j)->numvittoriesquadra;
(s+j+1)->numero = (s+j)->numero;
j--;
}
(s+j+1)->numvittoriesquadra = el_da_ins;
}
}
nessun problema al compilatore ma alla schermata a video ho i seguenti risultati :
Array non ordinato
squadra: n =8 vittorie = 0
squadra: n =9 vittorie = 1
squadra: n =10 vittorie = 0
squadra: n =11 vittorie = 2
squadra: n =12 vittorie = 0
squadra: n =13 vittorie = 1
squadra: n =14 vittorie = 0
squadra: n =15 vittorie = 3
Squadre In ordine Crescente di vittoria
squadra: n =8 vittorie = 0
squadra: n =9 vittorie = 0
squadra: n =9 vittorie = 0
squadra: n =9 vittorie = 0
squadra: n =9 vittorie = 1
squadra: n =11 vittorie = 1
squadra: n =11 vittorie = 2
squadra: n =15 vittorie = 3

pare che mentre le vittorie si ordino c'è qualche problema con array_squadra.numero :confused: