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.

codice:
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:

codice:
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.