Vous êtes sur la page 1sur 3

FAST - Natitingou

Algorithmes de tri et complexités


Durée : 3h

Consignes du devoir
L’évaluation est à livres et ordinateurs fermés et sans aucunes notes, à portables éteints et
rangés dans une boîte à l’entrée de la salle d’évaluation.

Implémentation de l’algorithme de tri rapide


La méthode du tri rapide est une méthode récursive de tri qui consiste à positionner défini-
tivement un élément du tableau, choisi comme pivot, de manière que tous les éléments de sa
gauche lui soient inférieurs et tous les éléments de sa droite lui soient supérieurs. Le pivot est
généralement choisi comme le dernier élément du tableau.

Division en sous-problèmes du problème principal

Nous effectuerons un tri en place, en nous arrangeant pour manipuler directement dans A, ses
sous-tableaux. Voici une division en sous-problèmes pour trier le tableau d’entiers A à partir de
cet algorithme :
— SP1 : Choisir le pivot,
— SP2 : Repositionner les éléments de A de manière que tous à sa gauche soient inférieurs
et tous à sa droite soient supérieurs :
— SP21 : Calculer la position du pivot,
— SP22 : Repositionner les éléments de A :
— SP221 : Créer un tableau B de dimension fin-debut+1 et le remplir avec les
éléments de A[debut..fin] de manière que les éléments à gauche du pivot lui
soient inférieurs et ceux à sa droite, lui soient supérieur,
— SP222 : Recopier les éléments de B dans A[debut..fin].
— SP3 : Effectuer le tri rapide sur le tableau A.

Méthodes à implémenter

Voici les méthodes que vous devez implémenter pour mettre en œuvre l’algorithme de tri rapide.
1 /* SP21 : Determine le nombre d ’é l é ments dans A [ debut .. fin ] qui sont
2 inf é rieurs ou é gal à A [ fin ]
3 @pre
4 - | A | = n >= 0
5 - 0 <= debut <= fin < n
6 @post
7 A reste inchang é
8 @result
9 nbVal = cardinal ({ A [ i ] | debut <= i < fin et A [ i ] <= A [ fin ] })

1
10 */
11 int nbValInf ( int A [] , int debut , int fin ) ;
12
13 /* SP22 : Repositionne les é l é ments de A [ debut .. fin ] en tenant compte
14 du fait que A [ fin ] est le pivot
15 @pre
16 - | A | = n >= 0
17 - 0 <= debut <= fin < n
18 @post
19 Soit m = nbValInf (A , debut , fin ) . On obtient A ’ tel que
20 A ’[ debut .. m [ < A [ fin ]
21 A ’[ m ] = A [ fin ]
22 A ’] m .. fin ] >= A [ fin ]
23 @result
24 m la position du pivot
25 */
26 int repositionner ( int A [] , int debut , int fin ) ;
27

28 /* Tri rapide */
29 void triRapide ( int A [] , int n ) ;
30
31 /* Initialise le tableau en fonction des donn é es entr é es par l ’ utilisateur
32 @pre :
33 - | tab | = n >= 0
34 @post
35 tab devient le tableau renseign é
36 @return
37 -
38 */
39 void initTab ( int tab [] , int n ) ;
40
41
42 /* Affiche le tableau sous le format : [ tab [0] , ... , tab [n -1]]
43 @pre
44 - | tab | = n >= 0
45 @post
46 tab reste inchang é
47 le tableau est affich é suivant le format
48 @return
49 -
50 */
51 void afficheTab ( int tab [] , int n ) ;
52
53 /* Calcule le minimum d ’ un tableau
54 @pre
55 - | tab | = n >= 0
56 @post
57 tab reste inchang é
58 @return
59 m = min ( tab )
60 */
61 int minTab ( int tab [] , int n ) ;

2
Compréhension du fonctionnement d’algorithmes de tri
Soit le tableau
A = [5, 9, 1, 0, -5, 15, 2].
Donner les tableaux obtenus à chacune des itérations de l’exécution de ces algorithmes de tris :
1. Tri par sélection :
La méthode de tri par sélection est une méthode qui consiste à sélectionner chaque fois, le
plus petit élément de la partie non-triée de A et de positionner cet élément à l’extrémité
de la partie triée de A, tout en maintenant cette dernière partie triée.
A un moment donné nous avons donc déjà trié un préfixe du tableau : A [0..i[. La
partie A[i..n[ est encore non triée. Il s’agit alors de sélectionner le plus petit élément de
A[i..n[, et de positionner cet élément en A[i]. Pour cela, il nous faut d’abord trouver
l’indice j du plus petit élément de A[i..n[, puis il nous faudra permuter les éléments
A[i] et A[j].

2. Tri par bulle :


La méthode du tri par bulle consiste à parcourir un tableau dans l’ordre croissant des
indices, tout en permutant systématiquement toute paire d’éléments consécutifs qui ne
sont pas dans l’ordre croissant. Si au cours d’un parcours, au moins une permutation a
été faite, on parcours à nouveau le tableau en effectuant les permutations.

3. Tri par insertion :


La méthode du tri par insertion consiste à parcourir le tableau A dans l’ordre croissant
des indices, et à insérer dans la partie triée de ce tableau, les éléments récupérés en par-
courant ce tableau. La partie triée doit être maintenue triée.

4. Tri par fusion :


La méthode du tri par fusion est une méthode récursive de tri qui consiste à diviser le
tableau à trié en deux sous-tableaux qui seront séparément triées. On fusionne alors ces
deux sous-tableaux triées.
Pour éviter de créer des tableaux supplémentaires lors des divisions de tableaux, nous
allons implémenter cette méthode en place. Nous allons chaque fois donner les positions
de début et fin des sous-tableaux à trier.

5. Tri rapide (voir la section précédente).

Vous aimerez peut-être aussi