[ C++ ] Bubble Sort con Array di Record

di il
2 risposte

[ C++ ] Bubble Sort con Array di Record

Ciao a tutti qualcuno mi saprebbe illuminare su dove sbaglio: Ho un array di record di alunni formato dai seguenti sotto-campi: [nome],[cognome],[voto] io li devo ordinare in base al voto ricevuto dal più alto al più basso.
void ordinaRecord( alunni &a, alunni h, int r )
{
     int register i, j;

     for( i = 0; i < r-1; i++ )
     {
          for( j = 1; j < r; j++ )
          {
               if( a.voto[ i ] < a.voto[ j ] )
               {
                   strcpy( h.nome[ 0 ], a.nome[ j ] );
                   strcpy( h.cognome[ 0 ], a.cognome[ j ] );
                   h.voto[ 0 ] = a.voto[ j ];
                   
                   strcpy( a.nome[ j ], a.nome[ i ] );
                   strcpy( a.cognome[ j ], a.cognome[ i ] );
                   a.voto[ j ] = a.voto[ i ];
                   
                   strcpy( a.nome[ i ], h.nome[ 0 ] );
                   strcpy( a.cognome[ i ], h.cognome[ 0 ] );
                   a.voto[ i ] = h.voto[ 0 ]; 
               }
               
          }
     }
     
} 
l'array viene caricato da file e passato in memoria.
Il file è così scritto:
Pinco Pallino 18
Tizio Caio 27
Semprionio Sempronis 25
Ciccio Palla 23
Il codice viene eseguito però mi ordina solo il primo con il secondo e non itera il bubble sort per gli altri elementi dell'array di record e non capisco il perchè.

Qualcuno mi saprebbe aiutare ?

P.s. Sto utilizzando dev c++ come ide.

Grazie.

2 Risposte

  • Re: [ C++ ] Bubble Sort con Array di Record

    Penso che hai bisogno di una variabile ausiliaria per esempio aux usata come segue e che puoi fare a meno dell'array a
    
    for(i=0;i<=n-2;i++)
                 for(j=1;j<=n-1;j++)
                        if(h.voto[i]<h.voto[j])
                            {aux=h.voto[j];
                             h.voto[j]=h.voto[i];
                                  h.voto[i]=aux;}
    
  • Re: [ C++ ] Bubble Sort con Array di Record

    Grazie per aver risposto comunuque ho risolto.
    Il codice era per buona parte sbagliato, l'ho riscritto correttamente, ora funziona tutto!
Devi accedere o registrarti per scrivere nel forum
2 risposte