{ A. Casali / M. Laporte
Plan
A. La classe pair
B. Matrice (2D)
C. Tri
D. Récursivité
Exemple :
1. la fonction find () qui renvoie vrai si la sous-chaine passée en
paramètre a été trouvée et sa position;
2. La fonction Int32Parse () qui renvoie vrai si la chaine passée en
paramètre peut être convertie en entier, ainsi que cet entier.
#include <utility>
using namespace std;
pair <Type1, Type2> VarIdent;
On construit une pair en appelant la fonction make_pair () de profil
pair <Type1, Type2> make_pair (Val1, Val2);
Exemple :
B. Matrice (2D)
C. Tri
D. Récursivité
B. Matrice (2D)
C. Tri
D. Récursivité
A la ième itération, on cherche le plus petit élément du tableau (V) entre les positions
[i, V.size()[ et on le permute avec l’élément en position i.
5 1 2 12 24 13 10 2
1 5 2 12 24 13 10 2
1 2 2 12 24 13 10 5
C.2 Tri par insertion
Chaque élément est placé à sa position finale dans le vecteur : on cherche à placer le
ième élément à sa place dans le sous vecteur [0, i[
5 1 2 12 24 13 10 2
1 5 2 12 24 13 10 2
1 2 5 12 24 13 10 2
C.3 Tri a bulles
Si l’élément d’indice i est plus grand que celui d’indice i +1, on les permute
5 1 2 12 24 13 10 2
1 2 5 12 13 10 2 24
1 2 5 12 10 2 13 24
Plan
A. La classe pair
B. Matrice (2D)
C. Tri
D. Récursivité
}
Et on sort quand de l’appel récursif ?
Il doit toujours y avoir une condition de sortie /
terminaison (même si elle est cachée).
D.3 Récursivité directe simple
}
D.5 Attention avec la récursivité
Non récursif :
Procedure AfficheChaine (Chaine : in str)
debut
pour (i vrariant_de 0 à taille(Chaine) – 1)
faire
Afficher (Chaine [i]); Récursif Oui Non
ffaire
fin Nb Contexte N+1 1
Nb Objets 2N + 2 2
Avec récursivité :
Procedure AfficheChaine (Chaine : in str) (utilisés)
debut
AffichCarac (Chaine, 0);
fin
5 1 2 12 24 13 10 2
Appel de Ventiler ()
1 2 2 5 24 13 10 12
Tous les chiffres plus petits que Pivot (ici 5) sont dans le sous
vecteur d’indice plus petit que PosPivot (ici 3), les autres sont
dans le sous vecteur d’indice plus grand.
On trie chacun des sous vecteurs indépendamment l’un
de l’autre.
D.6 Récursivité croisée / mutuelle
Pair (2) => Impair (1) => Pair (0) => true
Impair (2) => Pair (1) => Impair (0) => false
D.7 Récursivité terminale
Exemple :
Combi (3,5) 10
Pb : les derniers appels récursifs du tri rapide sont très couteux (mémoire +
temps), alors que la taille du sous-tableau est petite. Dans ce cas, on trie le sous-
tableau avec une autre méthode.
B. Matrice (2D)
C. Tri
D. Récursivité
Fonction à tester :
void Init (CVInt & V, unsigned Size)
{
V.resize (Size);
for (unsigned i (0); i < Size; ++i) V[i] = i + 1;
}
Exemple :
Assertion failed: (VInt[1] == 1), function TestInit, file
../amphi2_5/main.cpp, line 124.
E.2 Test externe
diff
Sortie théorique
Idée :
Temps1 <- DemanderHeure ();
appeler la fonction;
Temps2 <- DemanderHeure ();
CalculerDifference (Temps2, Temps1);
}
Est-ce suffisant?
NON : on n’a pas fait varier les paramètres de la fonction à
tester !!
Exemple:
On souhaite étudier l’impacte du passage par référence d’un vecteur dans
une fonction d’affichage.
void ShowVectV1 (const Vect & V);
void ShowVectV2 (const Vect V);