2011-10-17 5 views
0

J'utilise le tri de tri pour trier une liste de noms d'une équipe de cricket.Erreur de tri de tri de sélection

Le tri fonctionne après avoir répété trois fois un nom, ce qui élimine deux autres noms de la matrice que je suis en train de trier.

entrée de réseau (dans l'ordre):

Clarke Watson Beer Copeland Haddin Harris Hughes Hussey Johnson Khawaja Lyon Marsh Pattinson Ponting Siddle Warner

sortie après tableau de tri:

Beer Bière Copeland Haddin Harris Hughes Hussey Johnson Khawaja Lyon Marsh Pattinson Ponting

code:

void sort_names (Team_t player[]) { 

int pos; 
int min; 
int i, str_check; 

char *temp = NULL; 

for (pos = 0; pos < MAX_PLYR; pos++) { 

    min = pos; 

    for (i = (pos + 1); i < MAX_PLYR; i++) { 

     str_check = strcmp(player[i].pname, player[min].pname); 

     if (str_check < 0) { 

      min = i; 

    } 

    } 

    if (min != pos) { 

     temp = player[pos].pname; 

     strcpy(player[pos].pname, player[min].pname); 

     strcpy(player[min].pname, temp); 

    } 

}  
} 
+0

Avez-vous essayé de passer le code avec un débogueur (ou même un stylo et du papier) pour voir ce qui se passe? – Vicky

+0

J'ai peut-être manqué quelque chose, j'ai consulté le bureau à quelques reprises, et j'ai cassé l'enfer. –

+1

Votre code s'est saoulé après avoir obtenu «bière»: -/ – DhruvPathak

Répondre

2

Ce bit de votre code ne sera pas échanger correctement les entrées:

temp = player[pos].pname; 
strcpy(player[pos].pname, player[min].pname); 
strcpy(player[min].pname, temp); 

La première ligne enregistre un pointeur au nom du joueur 'pos à temp-pas le nom lui-même. Alors le premier strcpy l'écrase - il est perdu. (La deuxième strcpy copie simplement la même chaîne à l'endroit où elle était déjà.) C'est pourquoi vous voyez l'article qui trierait d'abord plus d'une fois.

+0

Droite. Et il est probablement préférable de trier non pas les chaînes, mais les pointeurs, les valeurs 'pname' dans' player [] '. –

+0

Merci beaucoup martin! Résolu. Je comprends ce que je faisais mal maintenant –