• Aucun résultat trouvé

LES ALGORITHMES DE TRI

N/A
N/A
Protected

Academic year: 2022

Partager "LES ALGORITHMES DE TRI"

Copied!
9
0
0

Texte intégral

(1)

A- Le tri d’un tableau :

0- Définition :

Un algorithme de tri est une suite d’instructions servant à ……….

……… de façon ……… ou ……….

Exemples :

 Séquence triée : 12 – 15 – 88 – 121 – 122 – 714 – 901 – 2510

 Séquence non triée : 15.5 – 19 – 10.7 - 201 - 3 – 155.4

NB : dans la suite du chapitre on choisit de trier les séquences par ordre croissant.

1- Tri à bulles : Exemple :

Principe :

Cette méthode consiste à faire remonter le plus grand élément du tableau en comparant les éléments successifs.

1- On compare le premier pair d’éléments.

2- Si T[1] > T[2] alors on permute T[1] et T[2], aller au pair suivant et répéter les étapes 1 et 2 jusqu’à comparer le dernier pair T[N] et T[N-1]. A la fin de ce premier parcours on aura passé le plus grand élément du tableau vers sa place finale qui est le Nième élément du tableau.

3- On recommence cette opération en parcourant de 1 à N-1 puis de 1 à N-2 et ainsi de suite.

4- On arrête le traitement si on arrive au dernier élément du tableau ou le tableau devient trié.

LES ALGORITHMES DE TRI

Disponible sur www.elbahi.jimdo.com

(2)

Algorithme de tri à bulles :

0)

DEF PROC Tri_bulles (N : entier ; Var T :TAB)

1) Répéter

Jusqu’a ( ) ou ( ) 2)

Fin Tri_bulles

2- Tri par sélection : Exemple :

Principe :

Cette méthode consiste à :

1- Trouver l’indice « position » (posmin) du plus petit élément du tableau.

2- Placer le plus petit élément (T[posmin]) à sa position finale (la première position) 3- Rechercher l’indice du second plus petit élément

i=1 posmin=7  permuter T[1] et T[7]

i=2 posmin=6  permuter T[2] et T[6]

i=3 posmin=6  permuter T[3] et T[6]

i=4 posmin=6  permuter T[4] et T[6]

i=5 posmin=7  permuter T[5] et T[7]

i=6 posmin=7  permuter T[6] et T[7]

Tableau Trié

(3)

Algorithme de tri par sélection :

0)

DEF PROC Tri_select (N : entier ; Var T :TAB)

1)

.

Pour i de 1 à N-1 faire

...

si (... ) alors ...

...

...

...

Fin si Fin Pour 2)

Fin Tri_select

0)

DEF FN PMin (T : TAB ; N, i : entier) : ...

1)

pm  i

Pour j de i+1 à N faire Si T[j] < T[pm] alors pm  j Finsi

Fin pour

2)

PMin  pm

3)

Fin PMin

Rôle de la fonction PMin :

...

...

...

...

(4)

3- Tri par insertion : Exemple :

Principe :

1- On commence par le deuxième élément du tableau.

2- On compare l’élément choisi (v) avec tous ses précédents dans la liste (la partie gauche du tableau) afin de l’insérer dans la bonne position après avoir décalé les éléments qui sont supérieurs à (v) vers la droite.

3- Répéter l’étape 2 pour l’élément suivant jusqu’à arriver au dernier élément du tableau.

Algorithme de tri par insertion :

0)

DEF PROC Tri_insert (N : entier ; VAR T : TAB)

1)

Pour i de 2 à N faire

v  T[i]

j  i

PROC decaler_d(T,j,v) T[j]  v

Fin pour

2)

Fin Tri_insert

0)

DEF PROC decaler_d (Var T :TAB ; Var j : entier ; v :entier)

1)

Tant que (T [j-1] > v) et (j>1) Faire

T[j]  T[j-1]

j  j-1 Fin Tant que

2)

Fin decaler_d

Après avoir décalé les éléments qui sont supérieurs à v je l’insère dans sa bonne position.

C’est le même principe du classement d’un

dossier dans un ensemble de dossiers triés par ordre alphabétique

ou numérique

(5)

B- Recherche d’un élément dans un tableau :

1- Introduction :

La recherche d’un élément dans un tableau est une pratique très courante en programmation. Nous allons voir deux méthodes de recherche :

 ………

 ………

2- Recherche séquentielle : Principe :

La recherche séquentielle d’un élément dans un tableau consiste à ……… d’un élément dans le tableau, par le fait de parcourir le tableau élément par élément jusqu’à ……… ce dernier ou ………...………

Algorithme de recherche séquentielle:

0) DEF FN RECHSEQ (T :TAB ; N :entier ; V :entier) : booléen 1) i

0

Répéter i

i+1

Jusqu'à (………. ) ou (………. ) 2) si ( T[i]

=

V ) alors

OK

vrai

sinon OK

faux fin si

3) RECHSEQ

OK 4) Fin RECHSEQ

Activité 1:

Donner l’algorithme d’une fonction nommée existe qui vérifie si un caractère existe ou non dans une chaine de caractères.

(6)

3- Recherche dichotomique : Principe :

La dichotomie (couper en deux) est un processus de recherche où à chaque étape l’espace de recherche se réduit à l’une des parties.

Pour exécuter ce processus il faut que les éléments de l’espace de recherche soient ordonnés et finis.

Algorithme de recherche dichotomique:

0)

DEF FN RECHERCHE (T :TAB ; N,M :entier) : booléen

1)

inf  1

sup  N OK  Faux

Répéter

i  (inf+sup ) div 2 Si (T[i] = M) alors OK  Vrai

sinon si (M>T[i]) alors inf  i +1 sinon sup  i -1 finsi

Jusqu’à ((inf > sup) ou (OK = vrai))

2)

RECHERCHE  OK

3)

Fin RECHERCHE

Activité 2:

On vous demande de faire le programme pascal qui remplit un tableau T par N entiers positifs de façon croissante avec 6<N<20.

Le programme doit par la suite saisir un entier quelconque et de vérifier s’il existe ou non dans le tableau en appliquant la recherche dichotomique.

(7)

C - Tri Shell

Présentation :

Le tri par shell est une amélioration de tri par insertion proposée par Donald L.Shell en 1959.

Le tri par shell se base sur le calcul de pas.

Question : Mais qu’est-ce que le pas et comment le calculer ?

Réponse : Donald Shell a proposé la formule (la suite) suivante pour calculer le pas :

(avec N est la taille du tableau)

U

0

= 1

U

n+1

= 3*U

n

+ 1

Exemple :

Calculer le pas pour un tableau de 100 éléments :

Pour calculer le pas d’un tableau de taille N

=

100 on procède comme suit : Etape1

=

déterminer la valeur maximale de pas

Etape 2

=

Les valeurs du pas pour trier le tableau sont :

Activité 3 :

Calculer les pas pour un tableau de 350 éléments : Remarque :

Le tri par insertion est un cas

particulier du tir shell (p

=

1)

(8)

Les valeurs du pas pour trier le tableau :

Algorithme de tri shell :

0) DEF PROC tri_shell (N :entier ; var T :tab) 1) P

0

Tant que (p<N) faire P (3*p+1)

Fin tant que

2) Tant que (p

0) faire P

p div 3

Pour i de p+1 à N faire v

T[i]

j

i

Tant que (j>p) et (T[j-p]>v) faire T[j]

T[j-p]

j

j-p Fin tant que T[j]

v

Fin pour Fin tant que 3) Fin tri_shell

Activité 4 :

Donner le programme pascal qui permet de :

-

Remplir un tableau T se façon aléatoire par N entiers (avec 4

N

15 et 10

T[i]

99) Trier le tableau par ordre croissant en utilisant le tri par shell.

………

(9)

III. Tri par fusion

Principe : ce tri se base sur le paradigme : « diviser pour régner » Le principe est le suivant :

-

Le tableau à tri sera devisé en deux sous tableaux.

-

Nous trions chacun d’entre eux.

-

Nous fusionnons les deux tableaux obtenus en respectant l’ordre du tri.

Activité 5 :

On se propose de faire le programme qui permet de :

-

Remplir un tableau T1 par N entiers de façon croissante (avec 2

N

10)

-

Remplir un tableau T2 par M entiers de façon croissante (avec 3

M

15)

-

En utilisant le tri par fusion, fusionner le contenu de deux tableaux T1 et T2 dans un tableau T de telle façon que le tableau T soit trié par ordre croissant.

-

Afficher le contenu des 3 tableaux.

Question : Quelle est la taille du tableau T ?

Réponse : ………..

Travail demandé :

1) Analyser le problème en le décomposant en modules.

2) Donner les algorithmes des modules dégagés.

Références

Documents relatifs

Nous retrouverons des exemples de séries de type Dirichlet à la fois pour l’analyse de l’algorithme naïf du PGCD et pour l’analyse des algorithmes de tri dans les sections1.4.5

De ce fait, si on parcourt la tableau de gauche à droite, on positionne à chaque fois le plus petit élément qui se trouve dans le sous tableau droit. Ou plus généralement : Pour

pour couper une bûche en 13 morceaux. ENIGME n°8

(configuration space and related spaces +

Soit x un nombre supérieur ou égal à la plus petite valeur de A et strictement plus petit que sa plus grande valeur.. On veut former une procédure de nom dich_t prenant x

Cette fonction renverra deux tableaux des temps moyens, suivant la taille du tableau à trier (un tableaupour le tri par sélection et un tableau pour le tri par insertion). On

• Traitements : Il s’agit d’un traitement répétitif jusqu'à le dernier élément du tableau, d’où utilisation de la boucle POUR … FAIRE. On doit

Nous allons la tester sur des fonctions (du type x 7→ x 2 − 2). La syntaxe à base de def est un peu trop lourde pour d’aussi petites fonctions. On utilise le mot clé lambda. Le