Algorithme de tri - Aide :-(
gaerebut
Messages postés
1017
Date d'inscription
Statut
Membre
Dernière intervention
-
gaerebut Messages postés 1017 Date d'inscription Statut Membre Dernière intervention -
gaerebut Messages postés 1017 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Oyé oyé, avis à ceux qui aiment ce casser la tête :-)
J'ai besoin de votre aide pour terminer un algorithme en PHP.
Son but est de trier par ordre croissant un tableau PHP contenant des moyennes.
Or, je tombe dans une boucle infinie et ne voit pas ou est le problème :-(
Voici mon code:
Merci de votre aide !
A+
Gaerebut
Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1: ne jamais dire tout ce que l'on sait...
-Règle 2: ...
Oyé oyé, avis à ceux qui aiment ce casser la tête :-)
J'ai besoin de votre aide pour terminer un algorithme en PHP.
Son but est de trier par ordre croissant un tableau PHP contenant des moyennes.
Or, je tombe dans une boucle infinie et ne voit pas ou est le problème :-(
Voici mon code:
$arrSort = false; while(!$arrSort){ for($n=0; $n<count($arrResult);$n++){ $nSub = $n-1; $nSup = $n+1; $moyenne = $arrResult[$n]['moyenne']; if(!isset($arrResult[$nSup])){ $arrSort = true; break; } else if(!isset($arrResult[$nSub])) break; else{ if($moyenne < $arrResult[$nSub]['moyenne']){ $tmpValue = $arrResult[$nSub]; $arrResult[$nSub] = $arrResult[$n]; $arrResult[$n] = $tmpValue; $n--; } else if($moyenne > $arrResult[$nSup]['moyenne']){ $tmpValue = $arrResult[$nSup]; $arrResult[$nSup] = $arrResult[$n]; $arrResult[$n] = $tmpValue; $n++; } else break; } } }
Merci de votre aide !
A+
Gaerebut
Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1: ne jamais dire tout ce que l'on sait...
-Règle 2: ...
A voir également:
- Algorithme de tri - Aide :-(
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- En cours de traitement sur le site de tri local ✓ - Forum Réseaux sociaux
- Peut on récupérer un colis au centre de tri chronopost - Forum Mobile
3 réponses
Salut.
Quel est le format de ton tableau contenant les moyennes ?
Array(1.5 , 2.4 , 3. 6 , ...) par exemple ?
Si oui, il suffit d'utiliser la fonction sort()
Si c'est un excercice, alors il te faudra deux fonctions :
- La principale qui contactera la seconde et qui fera divers assemblages.
- Une autre qui trouvera le plus petit nombre mais supérieur à un autre (celui le précédant).
Si tu veux la solution :
https://gist.github.com/7f85cf568f9dee55cba9
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
Bonne année à tous
Quel est le format de ton tableau contenant les moyennes ?
Array(1.5 , 2.4 , 3. 6 , ...) par exemple ?
Si oui, il suffit d'utiliser la fonction sort()
Si c'est un excercice, alors il te faudra deux fonctions :
- La principale qui contactera la seconde et qui fera divers assemblages.
- Une autre qui trouvera le plus petit nombre mais supérieur à un autre (celui le précédant).
Si tu veux la solution :
https://gist.github.com/7f85cf568f9dee55cba9
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
Bonne année à tous
Peux-tu nous donner un exemple de valeur que pourrait avoir $arrResult ? Ça aiderait à visualiser ;-)
Voici les 2 premiers résultat de mon tableau:
En te donnant ce code, je m'apperçoit que je me suis trompé dans mon algo !
Revoici son nouveau code (MAIS IL NE MARCHE TOUJOURS PAS :-( )
Merci
Gaerebut
[0] => [id] => 12 [moyenne] => [0] => 5 [1] => 1 [1] => [id] => 11 [moyenne] => [0] => 0 [1] => 0
En te donnant ce code, je m'apperçoit que je me suis trompé dans mon algo !
Revoici son nouveau code (MAIS IL NE MARCHE TOUJOURS PAS :-( )
$arrSort = false; while(!$arrSort){ for($n=0; $n<count($arrResult);$n++){ $nSub = $n-1; $nSup = $n+1; $moyenne = $arrResult[$n]['moyenne'][0]; if(!isset($arrResult[$nSup])){ $arrSort = true; break; } else if(!isset($arrResult[$nSub])) break; else{ if($moyenne < $arrResult[$nSub]['moyenne'][0]){ $tmpValue = $arrResult[$nSub]; $arrResult[$nSub] = $arrResult[$n]; $arrResult[$n] = $tmpValue; $n--; } else if($moyenne > $arrResult[$nSup]['moyenne'][0]){ $tmpValue = $arrResult[$nSup]; $arrResult[$nSup] = $arrResult[$n]; $arrResult[$n] = $tmpValue; $n++; } else break; } } }
Merci
Gaerebut
En fait, pour plus de rapidité j'étais partie sur un algorithme de tri à bulle.
Ton algo est bien mais je doute qu'il ne soit plus rapide ?
Sinon j'utiliserai le même principe que le tiens :-)
Merci pour la réponse
A+
Gaerebut