Il mio consiglio è quello di usare la logica alla base dell'insertion sort, ovvero ricerchi sempre il più "piccolo" e lo stampi, è possibile fare ciò mettendo <cognome> e <nome> in due array di caratteri e confrontando dalla prima posizione dell'array cognome sino a quando non capisci che uno dei due è maggiore. Es:
..........
diverso=-1;
i=0;
while(diverso==-1){
if (cognome1[i] < cognome2[i]){
maggiore=2;
diverso= 0;
}
else if (cognome1[i]>cognome2[i]){
maggiore=1;
diverso=0;
}
i++;
}
La variabile maggiore serve a dirti quale dei due array di caratteri è quello "da scartare".
Ovviamente la mia è solo una bozza veloce, poi sta a te aggiungere le varie sfumature, eccezioni etc.. Spero di essere stato utile =)