Ce qu'il faut faire quand on ne comprends pas un programme, c'est "executer" le programme avec des données qu'on choisit et comprendre étape par étape.
Le programme, c'est ca :
______________________________________________
n <- X; // X est impaire
pp <- -1;
pour i de 1 à (n-1)/2 faire{
____pp <- (chercher index du plus petit nombre de la liste);
____L(pp) <- L(n); // On remplace le + petit par le dernier
____L.remove(n); // On supprime le dernier
}
pp <- (chercher index du plus petit nombre de la liste);
print( L(pp) );
______________________________________________
Testons avec la liste suivante: 3 ; 5 ; 1 ; 7 ; 2 ; 10 ; 11
notre tableau commence à 1 et fini à 7 (et pas de 0 à 6)
n = 7, on va dont faire 3 fois la boucle:
1)
____pp = 3 ( le nombre 1);
____L(3) <- L(7) : La liste devient: 3 ; 5 ; 11 ; 7 ; 2 ; 10 ; 11
____L.remove(7) : La liste devient: 3 ; 5 ; 11 ; 7 ; 2 ; 10
2)
____pp = 5 ( le nombre 2);
____L(5) <- L(6) : La liste devient: 3 ; 5 ; 11 ; 7 ; 10 ; 10
____L.remove(6) : La liste devient: 3 ; 5 ; 11 ; 7 ; 10
3)
____pp = 1 ( le nombre 3);
____L(1) <- L(5) : La liste devient: 10 ; 5 ; 11 ; 7 ; 10
____L.remove(5) : La liste devient: 10 ; 5 ; 11 ; 7
pp = 2
print( L(2) ) = 5
Maintenant, remettons dans l'ordre la liste d'origine:
1, 2, 3, 5, 7, 10, 11
5 était bien la médiane.
Ce qu'on a compris:
En fait, on élimine tout les nombres inférieur à la médiane, de sorte à obtenir après être sorti de la boucle une liste dont le + petit nombre encore présent est FORCEMENT la médiane.