Académique Documents
Professionnel Documents
Culture Documents
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.
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].