Comme j'ai eu un peu de mal à trouver des informations sur la recherche rapide de médiane, je récapitule ici ce que j'ai trouvé.

Soit n valeurs
Soit Tab le tableau contenant ces valeurs.


Trivial :
Trier les valeurs et prendre la valeur du milieu

Plus efficace :
Sélectionner la n/2 ieme valeur la plus petite grace à un quickselect

Sur un faible nombre de valeurs (et c'est le cas qui m'interesse ici, notamment en traitement d'image) la solution la plus rapide :
Soit la fonction trier :
Si on peut modifier les valeurs d'entrées :
Trier(a,b) inverse a et b si a > b
Si on ne peut pas modifier les valeurs d'entrées :
Il faudra soit tout copier dans un tableau temporaire pour travailler dessus, soit pour gagner un peu de temps, copier tout en triant selon l'étape dans laquelle on est.

Exemple pour 3 valeurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
trier(Tab[0],Tab[1]); trier(Tab[1],Tab[2]); trier(Tab[0],Tab[1]); 
retourner Tab[1];
Pour 5 valeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
trier(Tab[0],Tab[1]); trier(Tab[3],Tab[4]); trier(Tab[0],Tab[3]); 
trier(Tab[1],Tab[4]); trier(Tab[1],Tab[2]); trier(Tab[2],Tab[3]); 
trier(Tab[1],Tab[2]); retourner Tab[2];
Pour 9 valeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
trier(Tab[1],Tab[2]); trier(Tab[4],Tab[5]); trier(Tab[7],Tab[8]); 
trier(Tab[0],Tab[1]); trier(Tab[3],Tab[4]); trier(Tab[6],Tab[7]); 
trier(Tab[1],Tab[2]); trier(Tab[4],Tab[5]); trier(Tab[7],Tab[8]); 
trier(Tab[0],Tab[3]); trier(Tab[5],Tab[8]); trier(Tab[4],Tab[7]); 
trier(Tab[3],Tab[6]); trier(Tab[1],Tab[4]); trier(Tab[2],Tab[5]); 
trier(Tab[4],Tab[7]); trier(Tab[4],Tab[2]); trier(Tab[6],Tab[4]); 
trier(Tab[4],Tab[2]); 
retourner Tab[4];