|
| ms-dos | Posté le 28/10/2007 @ 21:46 |
Petit astucien
55 Messages
| Bonjour tout le monde.
J'essaie de trier un tableau avec un algo. J'ai trouver plusieurs méthode et ça fonctionne ! Houra ! Mais j'en viens au problème ! J'utilise celui là comme algo: for (i = 0 ; i < NB_NOMBRES ; i++) { for (j = 0 ; j < NB_NOMBRES ; j++) { if (nombre[i] < nombre[j]) { temp = nombre[i]; nombre[i] = nombre[j]; nombre[j] = temp; }
Le problème c'est que je comprends vraiment rien , bon un petit peu . Est-ce que quelqu'un pourrait prendre le temps, svp, de me l'expliquer clairement avec des mots, exemples, phrases. N'importe l'important serait simplement que je comprenne. Merci à l'avance!
|
| |
| |
| Publicité |
|
|
| fennec. | Posté le 29/10/2007 à 14:06 |
Petit astucien
246 Messages
| Bonjour,
for (i = 0 ; i < NB_NOMBRES ; i++) {
for (j = 1 ; j < NB_NOMBRES ; j++) {
if (nombre[j] < nombre[i]) {
temp = nombre[i];
nombre[i] = nombre[j];
nombre[j] = temp;
}
}
}
Petit changement ta deuxième boucle (j) doit commencé a 1 pour évité un test inutile
si tu veu trié dans l'ordre croissant tu doi testé si ta deuxième valeurs est plus petite que la première
if (nombre[j] < nombre[i]) => ordre croissant
if (nombre[i] < nombre[j]) => ordre décroissant
Dans For NB_NOMBRES correspond au nombre de cas de ton tableau
Exemple :
Tableau 5 cases
0 1 2 3 4 => case
4 3 2 1 0 => valeurs
Ta première boucle concerne pour son premier tour la première valeur du tableau
Nombre[i] = 4
Ta deuxième boucle concerne pour son premier tour la deuxième valeur du tableau
Nombre [j] = 3
Au premier tour des deux boucle ton test va être if (3 < 4) => la condition est vrai
Donc le code dans le if va être exécuté
Première ligne du if : temp = nombre[i] => on stocke la valeur de nombre[i] dans une varible temporaire d’où son nom TEMP
Deuxième ligne : on a fait un backup de nombre [i] dans temp donc on peut copier nombre [j] sur nombre [i]
On se retrouve maintenant avec sa dans la tableau =>
3 , 3 , 2 , 1 , 0
Nombre [j] = 3 de la case 1
Nombre [i] = 3 de la case 0
Temp = 4
Maintenant il suffi de copier la valeur de temp dans nombre[j]
Troisième ligne => nombre[j] = temp ;
Maintenant ton tableau resemble a sa =>
3 , 4 , 2 , 1 , 0
Nombre[i] = 3
La deuxième boucle avance d’une case, donc
Nombre[j] = 2
Test if (Nombre[j] < Nombre[i]) OUI
le code du if est execute
…
Et ainsi de suite jusqu'à ce que les 2 boucles aie parcouru le tableau.
Essaye de mètre des print avec les valeurs de tes variables pour mieux comprendre
Le code
|
| |
|
| breizhbugs | Posté le 29/10/2007 à 18:20 |
Astucien
3001 Messages
| for (i = 0 ; i < NB_NOMBRES-1 ; i++) { for (j = i+1 ; j < NB_NOMBRES ; j++) { if (nombre[i] < nombre[j]) { //on echange nombre[i] et nombre[j] temp = nombre[i]; nombre[i] = nombre[j]; nombre[j] = temp; }
ca serais pas un tri plomb? le but est ici de faire "tomber" le plus grand nombre au début du tableau dont la borne inférieure est délimité par "i". Donc un fait un tri par ordre decroissant -> [ partie triée > nombre[i] | partie à trier ] Modifié par breizhbugs le 29/10/2007 19:35 |
| |
|
| fennec. | Posté le 30/10/2007 à 13:28 |
Petit astucien
246 Messages
| c'est un simple tri par ordre croissant ou décroissant selon le test |
| |
|
|
| Haut de la page |