PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, Tableaux, opérateurs Entrées sorties de base Structures de contrôle Algorithmes de recherche Algorithmes de Tri Insertion-Fusion Les pointeurs Procédures et fonctions les types composés Allocation dynamique Listes Chaînées 101 ALGORITHME DE RECHERCHE Objectif : Rechercher une information dans un tableau Méthode : séquentielle Soit T un tableau de N éléments et val l élément cherché parcours du tableau à partir du premier élément (T[0]) Arrêt quand élément trouvé ou si fin de tableau (T[n-1]) Complexité : linéaire de l ordre de n. Pire cas : parcourt de tout le tableau 102 1
RECHERCHE SÉQUENTIELLE Algorithme recherche_sequentielle {Recherche le premier indice où se trouve la valeur val parmi les N données du tableau tab; affiche l indice si la valeur est trouvée. } variables : T [0, N-1], val entier n, val, indice : entier indice 0 tant que ( val <> T[indice] && indice < N-1) faire indice indice + 1 ftq si T[indice] = val alors 7 1 15 8 2 afficher( " l'élément se trouve en :» indice); afficher( «Elément non présent " ); 103 ALGORITHME DE RECHERCHE Objectif : Rechercher une information dans un tableau trié Méthode : dichotomique ou «diviser pour régner» Soit T un tableau de N éléments et val l élément cherché T est trié Sinon effectuer un prétraitement de tri. Comparer val avec l élément u milieu du tableau T. Si c est le même => trouvé on recommence sur la première moitié ou la seconde selon que val est < à valmid ou val > valmid Arrêt quand élément trouvé ou si fin de tableau (T[indice-1]) Complexité : T(n) nombre d opérations sur un tableau de taille n T(n) satisfait l équation de récurrence T(n) = T(n/2)+1 104 2
RECHERCHE DICHOTOMIQUE Algorithme recherche_dichotomique {Recherche le premier indice où se trouve la valeur val en utilisant la stratégie diviser pour régner } variables T [0, N-1], val entier lnf, Sup, N, Mi : entier Saisir (val) Inf 0 Sup N-1 Mi (Inf + Sup)/2 tant que ( val <> T[Mi] && Inf <= Sup) faire si val < T[Mi] alors Sup = Mid - 1 Inf = Mid + 1 Mi (Inf + Sup)/2 ftq si T[Mi] = val alors afficher( " l'élément se trouve en :» Mi); afficher( «Elément non présent " ); 105 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, Tableaux, opérateurs Entrées sorties de base Structures de contrôle Algorithmes de recherche Algorithmes de Tri Insertion-Fusion Les pointeurs Procédures et fonctions les types composés Allocation dynamique Listes Chaînées 106 3
ALGORITHMES DE TRI Objectif : Etant donné une suite de N nombres de la ranger par ordre croissant (ou décroissant) Différents algorithmes Tri par sélection Tri se fait en espace constant Peu économe en temps (2 boucles for imbriquées ) Boucle interne fait N-1 opérations Boucle externe fait N-1 à itération 1, N-2 (itération 2) Complexité 2*(N-1)+(N-2) +(N-3) + 1 = (N+1)*N+N! N 2 Tri à bulles Peu économe en temps (2 boucles for imbriquées ) Complexité N 2 Tri rapide Econome en temps Complexité N*Log(N) Algorithme récursif 107 ALGORITHME DE TRI Objectif : Etant donné une suite de N nombres de la ranger par ordre croissant (ou décroissant) Méthode : Tri par sélection Soit T un tableau de N éléments Rechercher le plus petit élément parmi les N et on l échange à la fin avec le 1 er 7 8 9 2 0 Puis recherche du plus petit parmi les N-1 éléments restant et échange avec le 2 ème 0 8 9 2 7 parmi N-+1 éléments restants échange avec le K ième 0 2 9 8 7 0 2 7 8 9 108 4
TRI PAR SELECTION Algorithme tri_selection { Ranger par ordre croissant (ou décroissant) une suite de N nombres rangés dans un tableau T. } variables tab : tableau [0, N-1] de entier N, i, j, indicemin, ValMin : entier pour i = 0 à N-2 faire 7 8 9 2 0 indicemin i ValMin T[i] pour j = i +1 à N-1 faire si T[j] < ValMin alors i=0 i=1 indicemin j ValMin T[j] indicemin=0 ValMin=7 indicemin=3 ValMin=2 T[indiceMin] T[i] { Echange des deux valeurs } IndiceMin=4 ValMin=0 T[i] ValMin T[0]=0 T[4]=7 109 7 8 9 2 0 j=1 j=2 j=3 j=4 ALGORITHME DE TRI Objectif : faire remonter les plus grandes valeurs en haut de tableau Méthode : Tri à bulle Soit T un tableau de N éléments Comparer 1 er élément avec 2 ème. Si 1 er >2 ème, échanger les deux éléments 5 1 4 2 8 Comparer 2 ème élément avec 3 ème. Si 2 er >3 ème, échanger les deux éléments 1 5 4 2 8 comparer N-2 ième avec N-1 ième. Si N-2 ième > N-1 ième, échanger les deux éléments. 1 4 2 5 8 Recommencer à partir du début tant que vous avez opéré au moins à un échange 110 5
TRI À BULLE Algorithme tri_à_bulle { faire remonter les plus grandes valeurs en haut d un tableau T de N éléments. } variables tab : tableau [0, N-1] de entier N, i, j, temp : entier nouvel_echange : booleen répéter nouvel_echange faux pour i = 0 à N-1 faire si T[ i ] > T[i+1] alors temp T[ i +1] T[i+1 ] T[ i ] T[ i ] temp nouvel_echange vrai tant que nouvel_echange ==vrai 111 ALGORITHME D INSERTION POSITION P Objectif : Ajouter un élément dans un tableau trié ou pas. Insertion n est possible que si il reste de la place dans le tableau. L Insertion est un décalage à droite des éléments du tableau Méthode : Insertion Soit T un tableau de taille de N éléments, On insère un élément V à un position p Variable positionnée en fin de tableau 5 1 4 2 8 p Copie de T[] dans T[+1] tant que >=P Qd =p ranger la valeur v en T[] Incrémenter N 5 1 4 2 8 8 p 5 1 4 2 2 8 p 5 1 4 4 2 8 p 5 1 v 4 2 8 p 112 6
INSERTION À UNE POSITION P Algorithme INSERTION_POSITION_P { Insérer une valeur v à une position p dans un tableau T de N éléments et de taille S } Constantes S= 20 variables T : tableau [0, S-1] de entier N, p, v, : entier { Code d initialisation des N éléments du tableau } Afficher («entrez val à insérer et position p} Saisir (p); Saisir(v); si N < S alors pour = N-1 à p pas -1 faire T[+1] T[] T[p] v N N+1 Afficher («Insertion impossible») 113 ALGORITHME D INSERTION DANS TABLEAU TRIÉ Objectif : Ajouter un élément dans un tableau trié ou pas. Insertion n est possible que si il reste de la place dans le tableau. L Insertion est un décalage à droite des éléments du tableau Méthode : Insertion Soit T un tableau de taille de N éléments triés, On insère un élément V Variable positionnée en fin de tableau Copie de T[] dans T[+1] tant que >=0 && V>T[] Qd T[]<v ranger la valeur v en T[+1] Incrémenter N 1 2 4 5 8 1 2 4 5 8 8 1 2 4 5 5 8 1 2 4 4 5 8 1 2 v 4 5 8 114 7
INSERTION DANS UN TABLEAU TRIÉ Algorithme INSERTION_V_dans_Tableau-Trié { Insérer une valeur v à une position p dans un tableau T de N éléments et de taille S rangé par ordre croissant} Constantes S= 20 variables T : tableau [0, S-1] de entier N, p, v, : entier { Code d initialisation des N éléments du tableau } Afficher («entrez val à insérer} Saisir(v); si N < S alors tant que >= 0 && T[] > val faire T[+1] T[] -1 T[+1] v N N+1 Afficher («Insertion impossible») 115 ALGORITHME DE SUPPRESSION POSITION P Objectif : Supprimer un élément dans un tableau trié ou pas. La suppression est un décalage à gauche des éléments du tableau Méthode : Suppression Soit T un tableau de taille de N éléments, On supprime un élément V à un position p Variable positionnée à p+1 5 1 4 2 8 p Copie de T[] dans T[-1] tant que <N Décrémenter N 5 1 2 2 8 p 5 1 2 8 8 p 8
SUPPRESSION À UNE POSITION P Algorithme SUPPRESSION_POSITION_P { Supprimer l élément à une position p dans un tableau T de N éléments et de taille S } Constantes S= 20 variables T : tableau [0, S-1] de entier N, p, v, : entier { Code d initialisation des N éléments du tableau } Afficher («entrez position p de l élément à supprimer») Saisir (p); pour = p+1 à N 1 faire T[-1] T[] N N-1 117 SUPPRESSION D UNE VALEUR V Algorithme SUPPRESSION_VALEUR_V { Supprimer une valeur v dans un tableau T de N éléments et de taille S } variables T : tableau [0, S-1] de entier N, p=0, v, : entier { Code d initialisation des N éléments du tableau } Afficher («entrez la valeur à supprimer») Saisir (v); tant que T[p] <> val && p < N-1 faire p p +1 ftq si T[p] == val alors pour = p+1 à N -1 faire T[-1] T[] N N-1 Afficher («valeur non trouvée») 118 9