Algorithme de tri - Aide :-(

Fermé
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 - Modifié par gaerebut le 5/01/2011 à 16:55
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 - 5 janv. 2011 à 18:32
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:

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

3 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
Modifié par avion-f16 le 5/01/2011 à 17:14
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
1
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
5 janv. 2011 à 18:32
Merci mais ce n'est pas exactement ça.
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
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
5 janv. 2011 à 17:06
Peux-tu nous donner un exemple de valeur que pourrait avoir $arrResult ? Ça aiderait à visualiser ;-)
0
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
5 janv. 2011 à 17:12
Voici les 2 premiers résultat de mon tableau:

[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
0