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   -
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 19254 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   171
 
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 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Peux-tu nous donner un exemple de valeur que pourrait avoir $arrResult ? Ça aiderait à visualiser ;-)
0
gaerebut Messages postés 1017 Date d'inscription   Statut Membre Dernière intervention   171
 
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