Algorithmes de tri
Notions et points abordés :
void tri( int t[], int n )
qui, étant donné un tableau t à n
élements, ordonne ses éléments par
ordre croissant. Exemple : le tableau {
3, 1, 2, 7, 11, 24, 2 } à 7 éléments devient
{ 1, 2, 2, 3, 7, 11, 24 }. Pour chacun des exercices, il faut
répondre aux questions et en déduire une
définition de la fonction tri.i-ième étape
le i-ième élément à
la bonne place.void insere( int t[], int i ) qui étant
donné un tableau t et un indice i
valide du tableau t, insère
l'élément t[i] en bonne place dans la
partie de tableau t[0:i-1] (on écrira les
pré- et post-conditions). i-ième étape, on sélectionne donc
le plus petit élément dans la partie de tableau t[i:n-1]
et on l'échange avec t[i]. void selectionne( int t[], int n, int i ) qui
cherche l'indice du plus petit élément dans t[i:n-1]
et échange la valeur de cet élement avec celle de t[i].
Tri bulle
t[i] et t[i+1]
d'un tableau et d'effectuer une permutation si t[i]
> t[i+1]. On continue de trier jusqu'à ce qu'il n'y
ait plus de
permutation. int remonte_bulle( int t[], int n ) qui
effectue une permutation de t[i] avec t[i+1]
si ces éléments sont dans le désordre et ceci pour
chaque indice i depuis 0 jusqu'à n-2,
et retourne 1 si une permutation a eu lieu, 0
sinon.
Tri fusion
void fusionne( int t[], int n ) qui,
étant donné un tableau t à n
éléments où n est pair, interclasse
les éléments des moitiés t[0:n/2] et
t[n/2+1:n-1] que l'on supposera triées. Cette
fonction procède par effet de bord. Après
exécution de cette fonction le tableau t est
trié.
Tri rapide
x
sa valeuri particulier
: i ait pour valeur xt[0:i-1]
aient une valeur inférieure à xt[i+1:n-1] aient une valeur
supérieure à xt[0:i-1]
et t[i+1:n-1].int partitionne( int t[], int imin,
int imax, int j) qui, étant donné deux indices imin
et imax définissant une partie de tableau t[imin:imax],
et un indice j entre imin
et imax, réalise les permutations
nécessaires pour que, en notant x, la valeur t[j]
et i, le résultat de la fonction
: i ait pour valeur xt[imin:i-1]
aient une valeur inférieure à xt[i+1:imax] aient une valeur
supérieure à x.