Algorithme de tri - Aide :-(

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

  • Votes
  • Date
  • Date décroissante
  1. 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. 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
  2. Peux-tu nous donner un exemple de valeur que pourrait avoir $arrResult ? Ça aiderait à visualiser ;-)
    1. 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