Académique Documents
Professionnel Documents
Culture Documents
Chap 6 Types de Tri
Chap 6 Types de Tri
1
Plan
• Objectifs
• Tri à Bulles
• Recherche dichotomique
2
Objectifs
A la fin de ce chapitre, l'étudiant sera capable de :
les tableaux.
3
Tri par Sélection
Principe
1). Pour chaque entier i ( 0 < = i <= n-1 ), on parcourt les éléments T[i] pour retenir
l'indice k du minimum (le plus petit).
2). On place au rang i le plus petit des éléments ( T[i], T[i+1] ..... T[n-1] ) en échangeant
T[i] et T[k].
Code C de l'algorithme tri par sélection
for (i=0;i<n-1;i++)
{
min=i ;
for (j=i+1;j<n;j++) // Recherche du minimum en commençant à partir de l'indice i+1
{
if (T[j]<T[min])
min=j;
}
tampon=T[i];
T[i]=T[min];
T[min]=tampon;
}
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 6 5 0 3
indices 0 1 2 3 4
for (i=0;i<n-1;i++)
{
min=i ;
for (j=i+1;j<n;j++)
{
if (T[j]<T[min])
min=j;
}
tampon=T[i];
T[i]=T[min];
T[min]=tampon;
}
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 6 5 0 3
indices 0 1 2 3 4
1). Comparer, deux à deux, les éléments consécutifs d'un tableau ( T[i] et T[i+1]).
T n=5
2 6 5 0 3
indices i0 1 2 3 4
do
{ 2 > 6?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 6 5 0 3
indices i0 1 2 3 4
do
{
permut = 0;
6 > 5?
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers Permutation
:
T n=5
2 6 5 0 3
indices i0 1 2 3 4
do
{
permut = 0;
6 > 5?
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers Permutation
:
T n=5
2 5 6 0 3
indices i0 1 2 3 4
do
{
permut = 0;
6 > 5?
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 5 6 0 3
indices i0 1 2 3 4
do
{ 6> 0?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers : Permutation
T n=5
2 5 6 0 3
indices i0 1 2 3 4
do
{ 6> 0?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers : Permutation
T n=5
2 5 0 6 3
indices i0 1 2 3 4
do
{ 6> 0?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 5 0 6 3
indices i0 1 2 3 4
do
{ 6> 3?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers : Permutation
T n=5
2 5 0 6 3
indices i0 1 2 3 4
do
{ 6> 3?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers : Permutation
T n=5
2 5 0 3 6
indices i0 1 2 3 4
do
{ 6> 3?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 1ère itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1]; Le plus grand élément se trouve à la dernière case du
T[i+1] = aux ; tableau
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 5 0 3 6
indices i0 1 2 3 4
do
{
permut = 0; 2> 5?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 5 0 3 6
indices i0 1 2 3 4
do
{
permut = 0; 5> 0?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiersPermutation
:
T n=5
2 5 0 3 6
indices i0 1 2 3 4
do
{
permut = 0; 5> 0?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiersPermutation
:
T n=5
2 0 5 3 6
indices i0 1 2 3 4
do
{
permut = 0; 5> 0?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 0 5 3 6
indices i0 1 2 3 4
do
{
permut = 0;
5> 3?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers : Permutation
T n=5
2 0 5 3 6
indices i0 1 2 3 4
do
{
permut = 0;
5> 3?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 0 3 5 6
indices i0 1 2 3 4
do
{
permut = 0;
5> 3?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 0 3 5 6
indices i0 1 2 3 4
do
{
permut = 0; 5> 6?
for( i = 0 ; i < n-1 ; i++ )
{ 2ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 0 3 5 6
indices i0 1 2 3 4
do
{ 2> 0?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 3ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution Permutation
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 0 3 5 6
indices i0 1 2 3 4
do
{ 2> 0?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 3ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution Permutation
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{ 2> 0?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 3ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{ 2> 3?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 3ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{
permut = 0; 3> 5?
for( i = 0 ; i < n-1 ; i++ )
{ 3ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{
permut = 0; 5> 6?
for( i = 0 ; i < n-1 ; i++ )
{ 3ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i];
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{
permut = 0; 5> 6?
for( i = 0 ; i < n-1 ; i++ )
{ 4ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i]; permut = 0
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{
permut = 0; 0> 2?
for( i = 0 ; i < n-1 ; i++ )
{ 4ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i]; permut = 0
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{
permut = 0;
2> 3?
for( i = 0 ; i < n-1 ; i++ )
{ 4ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i]; permut = 0
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{ 3>5?
permut = 0;
for( i = 0 ; i < n-1 ; i++ )
{ 4ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i]; permut = 0
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{
permut = 0; 5>6?
for( i = 0 ; i < n-1 ; i++ )
{ 4ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i]; permut = 0
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1;
}
}
}
while (permut == 1);
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
0 2 3 5 6
indices i0 1 2 3 4
do
{
permut = 0; 5>6?
for( i = 0 ; i < n-1 ; i++ )
{ 4ème itération de la boucle do .. while
if ( T [i] > T [i+1] )
{ // permutation
aux = T[i]; permut = 0
T[i] = T[i+1];
T[i+1] = aux ;
permut = 1; Le tableau est trié par ordre
}
} croissant
}
while (permut == 1);
Tri par insertion
Principe
3). à l'étape i, on cherche la bonne position de l'élement T[i] dans le sous tableau trié de 0
à i-1.
Code C de l'algorithme tri par insertion
for (i=1;i<n;i++)
{
tmp = T[i]; // mémoriser T[i] dans une variable tmp
j = i;
// décaler vers la droite les éléments de T[0]..T[i-1] qui sont plus grands que tmp en
// partant de T[i-1]
while(j > 0 && (T[j-1] > tmp ))
{
T[j] = T[j-1];
j--;
}
T[j] = tmp;
}
Exemple d'exécution
Soit le tableau T suivant composé de 5 entiers :
T n=5
2 6 5 0 3
indices 0 1
i 2 3 4
T n=5
2 6 5 0 3
indices 0 1
i 2 3 4
T n=5
2 6 5 0 3
indices 0 1
i 2 3 4
T n=5
2 5 6 0 3
indices 0 1 2 3 4
i
Principe :
1). Chercher le milieu du tableau T.
2). Comparer X avec T[milieu] :
• Si x < T[milieu] : chercher X dans la 1ère moitié du tableau ( entre (T[0] et T[milieu-1])).
• Si x > T[milieu] : chercher X dans la 2ème moitié du tableau (entre (T[milieu+1] et T[N-1])).
3). On continue le découpage jusqu’à un sous tableau de taille 1.
Code C de l'algorithme Recherche dichotomique
trouve = -1; debut = 0 ; fin = n-1 ;
while ((trouve == -1)&&(debut <= fin ))
{
milieu = (debut + fin)/2;
if (T[milieu] > X )
fin=milieu - 1;
else if (T[milieu] < X)
debut = milieu + 1;
else
trouve=1;
}
Exemple d'exécution X 0
Soit le tableau T suivant composé de 7 entiers :
T
-1 0 2 4 5 6 9 n=7
0 1 2 3 4 5
fin
debut
Exemple d'exécution X 0
Soit le tableau T suivant composé de 7 entiers :
T
-1 0 2 43 5 6 9 n=7
0 1 2 3 4 5
fin
debut
milieu
Exemple d'exécution X 0
Soit le tableau T suivant composé de 7 entiers :
T
-1 0 2 43 5 6 9 n=7
0 1 2 3 4 5
fin
debut
milieu
0 < 4 --> chercher dans le sous tableau commençant de l'indice 0 jusqu'à l'indice 2
Exemple d'exécution X 0
Soit le tableau T suivant composé de 7 entiers :
T
-1 0 2 4 5 6 9 n=7
0 1 2 3 4 5
fin
debut
Exemple d'exécution X 0
Soit le tableau T suivant composé de 7 entiers :
T
-1 00 2 4 5 6 9 n=7
0 1 2 3 4 5
fin
debut
milieu
Exemple d'exécution X 0
Soit le tableau T suivant composé de 7 entiers :
T
-1 00 2 4 5 6 9 n=7
0 1 2 3 4 5
fin
debut
milieu
• Dans ce chapitre, nous avons appliqué 3 variantes d'algorithmes de tri sur des tableaux unidimentionnels.
✔ Tri à bulles
• Elle peut se faire aussi avec le principe de la recherche dichotomique . Dans ce cas, le tableau doit être trié.