Un algorithme de tri : le tri par sélection
Objectif de l’activité : Concevoir et programmer sur Processing un algorithme de tri : le tri par sélection. Utiliser un algorithme de tri pour un traitement d’image.
I) Soyez disciplinés, rangez-vous ! (Trier une main de cartes)
Castor aime jouer à un jeu de tri de cartes dont les règles sont les suivantes.
Les cartes doivent être posées côte à côte par ordre croissant de gauche à droite en un
minimum de déplacements.
Un déplacement équivaut à l’échange de deux cartes.
Combien de déplacements faut-il effectuer au minimum pour classer les cartes ci-dessous :
Ecrire l’algorithme permettant de trier un tableau de n éléments (numérotés de 0 à n-1)
II) Mettons de l’ordre !!!!! (implémentation de l’algorithme)
Partie A : à le recherche de JOE
Ecrire une fonction
int min(int [] tab, int i, int j)
qui prend en entrée un tableau d’entiers de taille n et retourne
l’indice du minimum de la portion du tableau comprise entre les
indices i et j (
Partie B : échangeons les casseroles
1) Apparemment, on peut ranger deux entiers n et p à l’aide de l’algorithme suivant :
Entrée : saisir n et p entiers naturels
Traitement : si n > p alors
affecter à n la valeur p
affecter à p la valeur n
Sortie : afficher n puis p
En sortie, on demande d’afficher successivement les entiers dans l’ordre croissant.
Pourquoi cet algorithme est incorrect ? Quel résultat donne-t-il ?
2) Voici un algorithme correct pour ranger n et p dans l’ordre croissant :
Entrée : saisir n et p entiers naturels
Traitement : si n > p alors
échanger n et p
Sortie : afficher n puis p
a) Imaginez que vous possédiez une petite et une grande casserole : la petite casserole contient
du chocolat fondu et la grande casserole du beurre fondu.
Écrivez, en pseudo-langage, le traitement qui initialise le contenu des casseroles à leur valeur
initiale et ensuite réalise la permutation de leurs contenus.
b) Écrire une fonction
void echange(int [] t,int i, int j)
qui permute les valeurs contenues à l’indice i et à l’indice j du tableau.
Partie C : finalisation
A l’aide de fonctions précédentes, implémenter et tester la fonction
int [] tri_selection(int [] t, int n)
qui retourne le tableau t, de n valeurs, ordonné dans l’ordre croissant.
III) Défi :
Le filtre médian permet de supprimer du bruit dans les images. Il est particulièrement utile lorsque
ce bruit est de nature « poivre et sel » (c’est-à-dire, lorsque certains pixels sont saturés, avec des
valeurs à 0 ou à 255, les autres étant non bruités et restant donc inchangés).
Le traitement consiste à calculer, en chaque pixel, la valeur médiane des pixels du voisinage (pour
une fenêtre de dimension 3*3, le pixel et ses 8 voisins). Pour trouver la valeur médiane, il faut au
préalable ordonner les valeurs des pixels.