Académique Documents
Professionnel Documents
Culture Documents
Points importants
Introduction à l’algorithmique;
Algorithmes et programmes;
Efficacité des algorithmes;
La notation grand O.
Introduction à l’algorithmique
Etudier l’algorithmique c’est apporter des
réponses à vos questions;
Historique :
L’étymologie du mot algorithme provient du
nom du mathématicien et astronome perso-
arabe Muhammed Ibn Musa Abu Djafar al-
Chwarismi.
Algorithmes et Programmes
Définition 1:
Un algorithme est suite finie d’opérations
élémentaires constituant un schéma de
calcul ou de résolution d’un problème. C’est
une séquence d’instructions permettant de
réaliser une tâche en un nombre fini
d’étapes.
Première solution
Remplissez le contenant de 5 litres.
Versez le contenu du contenant de 5 litres dans le contenant de 3
litres.
Videz le contenant de 3 litres.
Versez le contenu du contenant de 5 litres (2 litres) dans le
contenant de 3 litres.
Remplissez le contenant de 5 litres.
Versez le contenu du contenant de 5 litres dans le contenant de 3
litres jusqu'à ce que ce dernier soit
plein (1 litre).
Il reste alors 4 litres dans le contenant de 5 litres.
Algorithmes et Programmes
Deuxième solution
Algorithmes et Programmes
Bravo!
Vous venez d’écrire votre premier algorithme.
Algorithmes et Programmes
Exercice 2 : En informatique, l'on code l’information dans
des bits ou des séquences de bits.
Vous voulez aider un météorologue à coder l’information
dans le but d’un traitement automatique sur la direction du
vent.
De quelle direction souffle le vent ?
Solution:
1. Le vent souffle-t-il de l'une des directions suivantes : nord ou
est (oui / non)
2. Le vent souffle-t-il de l’une des directions suivantes : est ou
ouest (oui / non)
Définition 3:
La programmation est l’écriture effective d’un
programme dans un langage
compréhensible par la machine (ordinateur).
Algorithmes et Programmes
Propriétés caractéristiques d’un algorithme
Définition:
Soit f, g:R→R ou R→N,
f(x) est O(g(x)) i.e f(x) appartient à O(g(x)) si f
est éventuellement dépassée par un multiple
de g, c’est-à-dire s’il existe des constantes C
et k telles que :
∀𝑥 > 𝑘, 𝑓 𝑥 ≤ 𝐶|𝑔(𝑥)|
Notation grand O
Exemple:
Exemple:
Exemple:
Montrer que 7x2 est O(x2) en fournissant les
témoins.
Notation grand O
Théorème 1:
Notation grand O
Réponse :
Donc
Notation grand O
Théorème 1: exemple 2
Notation grand O
Théorème 1: exemple 3
Notation grand O
Théorème 2:
Notation grand O
Exercice 1:
Soit f(x)= x5 + 5x , trouvez une fonction g(x)
la plus simple, telle que f(x) appartient à
O(g(x)).
Notation grand O
Solution 1:
La fonction f est une somme. On peut
traduire le théorème de la somme comme la
fonction dont le grand O domine les autres
qui l’emporte. Dans le cas de f, 5x domine x5
i.e x5 est en O(5x). Ainsi, x5 + 5x est en
O(5x).
La fonction cherchée est donc g(x)= 5x
Notation grand O
Exercice 2 :
Soit
Trouvez une fonction g(x) la plus simple
possible telle que f(x) est en O(g(x))
Notation grand O
Solution 2 :
On sait est en O(x2) (théorème
1).
est en O(3x) (théorème 1).
est en O(log(x)) (théorème 1)
D’après le théorème 2, c’est 3x qui domine.
D’après le théorème de la somme,
est en O(3x). La fonction
cherchée est donc g(x)= 3x
Notation grand O
Exercice 3 :
Soit f(n)=(14n+ 3).log(n)+3n2 . Trouvez une
fonction g(n) la plus simple possible telle que
f(n) soit dans g(n).
Notation grand O
Solution 3 :
On sait que 14n+3 est en O(n). Par le théorème
du produit, (14n+3).log(n) est en O(n.log(n)).
On a 3n2 en O(n2 ), (14n+3).log(n) en
O(n.log(n)). Selon le théorème 2, n2 domine
n.log(n). Ainsi, d’après le théorème de la
somme, (14n+ 3).log(n)+3n2 est en O(n2).
La fonction est donc g(n)=n2
Notions élémentaires de
programmation
Que réalise un programme informatique en général?
Réponse :
• Lit des données en entrée;
• Effectue des calculs (sur ces données);
• Ecrit des données en sortie (résultats).
Notions élémentaires de
programmation
Exemple suivant le langage C:
• Lit des données en entrée (clavier) avec la
fonction scanf;
Réponse :
Trouver une solution à un problème;
Exprimer cette solution de façon structurée;
Traduire cette solution en un langage
compréhensible par la machine;
Tester le programme.
Notions de bases en programmation
Réponse :
L’ordinogramme (organigramme);
Le pseudo-code.
Notions de bases en programmation
Les commentaires;
Le programme principal;
Les entrées/sorties;
Les constantes.
Les commentaires
Réponse :
Un commentaire est une information
ajoutée au code qui sert à en clarifier le
fonctionnement et qui n'a aucun effet sur
l'exécution.
Les commentaires
Réponse :
/* Le texte à placer en commentaires. */
ou encore
/* Le texte
à placer
en commentaires. */
Le programme principal
int main(void)
{
Instruction 1, Instruction 2, etc.
}
Le entrées / sorties
Réponse :
Une entrée est une opération par laquelle
un programme acquiert une donnée de
l’utilisateur (lecture sur disque, lecture au
clavier, saisie d'un clic de souris, etc.).
Le entrées / sorties
syntaxe d’une entrée en C:
La fonction scanf permet de lire des données
avec les formats suivants (liste non
exhaustive) :
%d pour le type int (entier);
%u pour le type unsigned int (entier non signé);
%f pour le type float (réel);
%lf pour le type double;
%c pour le type char;
%s pour le type chaîne
Les entrées / sorties
Réponse :
Une sortie est une opération par laquelle
un programme fournit une donnée à
l’utilisateur (écriture sur disque, affichage à
l'écran, son dans les haut-parleurs, etc.).
Les entrées / sorties
syntaxe d’une sortie en C:
Solution 1 :
#include <stdio.h>
void Exercice1 (void)
{
printf ("c’est déjà un succès ") ;
}
Les entrées / sorties
Exercice 2: Écrivez une procédure qui saisit une valeur
entière au clavier et affiche le carré de cette valeur à l'écran.
Solution 2 :
void carre (void)
{
int valeur_lue ;
printf ("Veuillez entrer un nombre :\n");
scanf ("%d", &valeur_lue);
printf ("la valeur calculée est %d", valeur_lue*valeur_lue)
;
}
Les entrées / sorties
Exercice 3: Écrivez une procédure qui :
- saisit le salaire horaire d'un employé;
- saisit le nombre d'heures travaillées par l'employé;
- calcule le salaire qui doit être versé à l'employé;
- affiche le salaire à l'écran. Par exemple, si l'utilisateur entre 23.50 et 40, la
procédure affiche le message suivant : l’employé doit recevoir 940 FCFA.
Solution 2 :
void salaire (void)
{
float salaire_horaire ;
float nb_heures ;
float salaire_a_verser ;
printf ("Entrez le salaire horaire : \n ");
scanf ("%f", &salaire_horaire);
printf ("Entrez le nombre d'heures : \n ");
scanf ("%f", &nb_heures);
salaire_a_verser = nb_heures * salaire_horaire ;
printf ("Salaire a verser est %f", salaire_a_verser) ;
}
Les variables
Réponse:
Une variable est un identificateur, par exemple x
ou prénom, utilisé pour représenter une valeur.
Réponse :
D’un point de vue théorique, une variable
est un symbole que l’on utilise pour
représenter une valeur.
D’un point de vue pratique, une variable
est un espace mémoire où l’on peut ranger
une information.
Les variables
syntaxe d’une variable en C:
Une déclaration de variable a toujours la
forme :
type identificateur;
Ou
type identificateur=valeur;
Exemple:
float x, y=2.0; /* nombres réels. y a pour
valeur initiale 2.0 */
int n; /* nombre entier */
Les variables
Solution:
x=3
y=5
x=6
Les principaux types en C
Réponse :
Le type identifie la nature d'une donnée.
Le type d'une variable détermine sa taille,
les données qu'elle peut contenir et les
opérations permises sur cette variable.
Les principaux types en C
type entier int: représentation des nombres
entiers;
types réels float et double: permettent de
représenter des nombres réels avec une certaine
précision;
type char: est un type caractère codé sur 1 octet.
Réponse :
Une constante est un identificateur utilisé
pour représenter une valeur. Cette valeur
ne peut pas changer durant l’exécution
d’un programme.
Les constantes
On peut donner un nom à une constante par
un #define au début du programme (après
les #include):
Exemple:
#define PI 3.14159265358979323846 /* Constante de type
float */
Réponse :
Une instruction conditionnelle est une
instruction permettant de choisir les
instructions à réaliser en fonction de
l’évaluation d’une expression booléenne.
Les instructions conditionnelles
Exercice :
a) Écrivez une procédure qui saisit l'âge d'un
individu au clavier et affiche à l'écran si la
personne est majeure ou non.
Solution a):
#include <stdio.h>
#define age_majorite 18
void Majeur (void)
{
int age ;
printf ("veuillez entrer votre age:\n");
scanf ("%d", &age);
if (age >= age_majorite)
{
printf ("vous etes une personne majeure \n") ;
}
else
{
printf ("vous etes mineur") ;
}
}
Les instructions conditionnelles
Solution b):
void PlusGrand (void)
{
float premier_nombre, deuxieme_nombre ;
printf ("veuillez entrer un nombre: ");
scanf ("%f", &premier_nombre);
//printf("\n");
printf ("veuillez entrer un nombre:");
scanf ("%f", &deuxieme_nombre);
Réponse :
Une instruction itérative permet de répéter
une ou plusieurs instructions tant que
l’évaluation d’une expression booléenne
est vraie.
Les instructions itératives
Réponse :
do...while
for
while
Les instructions itératives
Réponse :
Le do…while est la seule boucle dont les
instructions sont toujours exécutées au
moins une fois.
Les instructions itératives
void exercice_a(void)
{
int minimum, maximum, compteur ;
printf ("veuillez entrer un nombre: \n ");
scanf ("%d", &minimum);
printf ("veuillez entrer un nombre:\n");
scanf ("%d", &maximum);
compteur=minimum + 1 ;
while (compteur < maximum) /* boucle tant que */
{
printf ("%d ", compteur);
compteur=compteur + 1 ;
}
}
Les instructions itératives
Solution b) :
void exercice_b(void)
{
int minimum, maximum, compteur, temp ; /* temp pour permuter les valeurs saisies */
printf ("veuillez entrer un nombre:\n");
scanf ("%d", &minimum);
printf ("veuillez entrer un nombre:\n");
scanf ("%d", &maximum);
if (minimum>maximum)
{
temp=minimum ;
minimum=maximum ;
maximum=temp ;
}
compteur=minimum + 1 ;
while (compteur < maximum) /* boucle tant que */
{
printf ("%d ", compteur);
compteur=compteur + 1 ;
}
}
Les instructions itératives
Réponse :
La boucle For.
Les instructions itératives
Syntaxe d’une boucle For :
b) Écrivez une procédure qui lit deux valeurs et affiche tous les nombres
se trouvant entre les deux valeurs lues. Par exemple, si on lit les valeurs
4 et 8, la procédure affiche les nombres 5, 6 et 7. Vous pouvez supposer
que la première valeur est toujours inférieure à la seconde.
Petite contrainte supplémentaire : utilisez une boucle For.
Les instructions itératives
Exercices:
Réponse :
- && (la conjonction)
- || (la disjonction)
- ! (la négation)
Les opérateurs logiques
Évaluez l’expression suivante :
! (True && (False || ! (False && True)))
Réponse :
! (True && (False || (!False)))
! (True && (False || True))
! (True && True)
! True
False
Les opérateurs logiques
Que peut-on affirmer sur l’expression
suivante où x est une variable booléenne
dont la valeur est inconnue :
False && x
Réponse :
Qu’elle est fausse !
En effet, peu importe la valeur de x,
puisque l’opérande de gauche est faux,
l’expression sera toujours fausse.
Les opérateurs logiques
Que peut-on affirmer sur l’expression
suivante où x est une variable booléenne
dont la valeur est inconnue :
True || x
Réponse :
Qu’elle est vraie !
En effet, peu importe la valeur de x,
puisque l’opérande de gauche est vrai,
l’expression sera toujours vraie.
Les sous-programmes
Qu’est ce qu’un sous-programme?
Réponse :
Un sous-programme est un bloc de code qui
porte un nom et se compose d’une séquence
d’instructions réalisant une tâche précise.
a) son nom;
Algorithme
début
entier n, puiss;
lire(n);
puiss ←DeuxPuiss(n);
ecrire(puiss);
fin
Les sous-programmes
Une procédure aura un prototype de la forme
:
Algorithme
début
entier n, puiss;
lire(n);
puiss ←DeuxPuiss(n);
Affiche(puiss);
Fin
Les sous-programmes
Exercices :
aaa) Écrivez une procédure qui lit un nombre et recommence
tant que celui-ci ne se trouve pas entre 1 et 9 inclusivement.
Elle affiche ensuite la valeur lue.
void exercice_aaa ()
{
int chiffre_lu ;
printf("Entrez un chiffre entre 1 et 9 :\n ");
scanf("%d", &chiffre_lu);
while ((chiffre_lu<1)||(chiffre_lu>9))
{
printf("Entrez un chiffre entre 1 et 9 :\n");
scanf("%d", &chiffre_lu);
}
printf("la valeur lue est %d : ", chiffre_lu);
}
Les sous-programmes
Solution bbb) :
void exercice_bbb ()
{
int compteur ; /* pour traiter les valeurs de 1 à 100*/
char message[] = "Les nombres suivants sont des multiples de 17 ou de 23 :" ; /* le
message à afficher contenant les nombres*/
/*' On ajoute au message tous les multiples de 17 ou de 23*/
printf("%s ", message);
for (compteur=1; compteur<100; compteur ++)
{
if ((compteur % 17==0) ||(compteur % 23==0))
{
enregistrement TypeArticle
début
entier code;
caractere nom[100];
reel prix;
fin
Les enregistrements
enregistrement TypeArticle
début
entier code;
caractere nom[100];
reel prix;
fin
PROCEDURE Affiche(TypeArticle A)
début
ecrire(A.code);
ecrire(A.nom);
ecrire(A.prix);
fin
Algorithme
début
TypeArticle A;
ecrire("Entrez le code, le nom et le prix");
lire(A.code, A.nom, A.prix);
Affiche(A);
Fin
Les enregistrements
A quoi servent les enregistrements?
struct nomType{
type1 composante1 ;
type2 composante2 ;
...
typen composanten
}
Les paramètres formels et
paramètres effectifs
Un paramètre permet aux sous-programmes
d'échanger de l'information qui normalement
ne serait pas visible entre eux.
c) Écrivez une fonction qui trouve la valeur absolue d'un nombre. Prenez
le temps de tester la fonction à l'aide d'une petite procédure.
Les paramètres formels et
paramètres effectifs
Qu’est ce qu’un paramètre formel?
Paramètres formels
Paramètres effectifs
puissance (3,6)
Les paramètres formels et
paramètres effectifs
Exercices: série 1
a) Écrivez une fonction qui trouve la valeur
maximale parmi deux nombres.
Pointeurs;
Tableaux;
Tableaux à deux dimensions.
Les pointeurs
Qu’est ce qu’un pointeur?
Exemples :
int * ptr1;
double * ptr2;
Pointeurs : assignation
• Pour indiquer qu’un pointeur ne pointe nulle
part, on lui assigne la valeur NULL.
Exemple :
int nb;
int * ptr = &nb;
Pointeurs : indirection
En ajoutant l’opérateur * devant une
adresse ou un pointeur, on obtient l’objet
pointé.
Exemple :
int nb;
int * ptr = &nb;
*ptr = 5;
Pointeurs : type
Soit les déclarations suivantes :
int nb;
int * ptr = &nb;
Alors :
#include <stdio.h>
void NeModifiePas(int x)
{
x = x+1; /* le x local est modifié, pas le x du main */
}
int main(void)
{
int x=1;
NeModifiePas(x);
printf("%d", x);/* affiche 1 : valeur de x inchangée */
return 0;
}
Les pointeurs
Passage de paramètre par adresse:
Réponse:
void remplir(int *a,int *b,float *x)
{
*a = 0;
*b = 0;
*x = 0.0;
}
int main()
{
int u, v;
float t;
remplir(&u, &v, &t);
return 0;
}
Les tableaux
Qu’est ce qu’un tableau?
Réponse:
Un tableau est une série d'éléments de même type
regroupés sous un seul identificateur. Chaque élément
possède un indice permettant d'accéder à son contenu
en lecture et en écriture..
typeElements nomTableau[NOMBRE_ELEMENTS];
où typeElements est le type des éléments du
tableau, nomTableau est le nom du
tableau, et NOMBRE_ELEMENTS est une
constante indiquant le nombre d’éléments du
tableau.
Les tableaux
Exemple de déclaration:
int tab[10];
Tableau nommé tab contenant 10 entiers.
char * tab_ptr[30];
Tableau nommée tab_ptr de 30 pointeurs de caractère.
Exercice:
Écrivez une procédure qui saisit trois valeurs
entières au clavier et les affiche dans l'ordre
inverse de la lecture. Cependant, plutôt que
d'utiliser trois variables, utilisez plutôt un
tableau de trois entiers.
Les tableaux
Solution:
#include <stdio.h>
void lire_trois_valeurs_avec_tableau()
{
int tab[3] ;
printf("Veuillez entrer un nombre :") ;
scanf("%d", &tab[0]) ;
printf("Veuillez entrer un nombre :") ;
scanf("%d", &tab[1]) ;
printf("Veuillez entrer un nombre :") ;
scanf("%d", &tab[2]) ;
printf(tab[2]) ;
printf(tab[1]) ;
printf(tab[0]);
}
Les tableaux
Accès aux éléments d’un tableau à une dimension:
#include <stdio.h>
int main(void)
{
int tab[5] = {3, 56, 21, 34, 6};/* avec point-virgule */
for (i=0 ; i<5 ; i++) /* affichage des éléments */
printf("tab[%d] = %d\n", i, tab[i]);
return 0;
}
Les tableaux à deux dimensions
Qu’est ce qu’un tableau à deux dimensions?
Réponse :
int main(void)
{
int tableau[NB_LIGNES_MAX][NB_COLONNES_MAX];
int nbl, nbc;
puts("Entrez le nombre de lignes et de colonnes");
scanf("%d %d", &nbl, &nbc);
if (nbl > NB_LIGNES_MAX || nbc > NB_COLONNES_MAX)
{
puts("Erreur, nombre dépassant la taille du tableau");
exit(1);
}
Creer(tableau, nbl, nbc);
Afficher(tableau, nbl, nbc);
return 0; }
Les tableaux à deux dimensions
Le résultat de l’exécution de ce programme
pour 4 lignes et 6 colonnes est :
012345
123456
234567
345678
Les structure de données
Points importants
Listes chainées;
Piles;
Files.
Les listes chainées
Qu’est ce qu’une liste chainée?
Réponse :
3
Maillon (ou
Tête de nœud)
liste Pointeur vers
un nœud
Données
Données
(toutes
(toutes de
de
même
même type)
type)
Déclaration d’une liste chaînée
Pour créer une liste chaînée, il faut déclarer une nouvelle structure de
données : la structure qui représentera une cellule.
Création
Consultation (au début, à la fin et ailleurs)
Ajout (au début, à la fin et ailleurs)
Retrait (au début, à la fin et ailleurs)
Consultation de la longueur
Création de la liste
On fait pointer la tête vers NULL.
On initialise le nombre de nœuds à 0.
?
?
0
Consultation du ième élément
SI i ≥ 0 et i < nombre de nœuds de la liste ALORS
On fait pointer un pointeur sur le premier nœud.
TANT QUE i > 0 BOUCLE
Faire pointer le pointeur vers le prochain nœud.
ii-1
FIN TANT QUE
FINSI
i 26 34 12
10
2 3
Ajout au début de la liste
On tente de créer un nouveau nœud.
SI la création fut un succès ALORS
On fait pointer le nouveau nœud vers le premier
élément de la liste (NULL si celle-ci est vide).
On initialise le nœud.
On fait pointer la tête de liste sur le nouveau nœud.
On incrémente le nombre de nœuds.
FINSI
34 12
3
2
26
Ajout à la fin de la liste
SI la liste est vide ALORS
On ajoute au début de la liste
SINON
On tente de créer un nouveau nœud.
SI la création fut un succès ALORS
On positionne un pointeur sur le dernier élément de la liste (voir consulter
ième élément).
On initialise les champs du nouveau nœud.
On fait pointer le dernier nœud sur le nouveau nœud.
On incrémente le nombre de nœuds.
FINSI
FINSI
34 12 26
3
2
Ajout à la ième position
SI i = 0 OU la liste est vide ALORS
On ajoute au début de la liste
SINON SI i < nombre de nœuds de la liste ALORS
On tente de créer un nouveau nœud.
SI la création fut un succès ALORS
On positionne un pointeur sur le i-1ème nœud.
On initialise les données du nouveau nœud.
On fait pointer le nouveau nœud sur le ième nœud (NULL si on ajoute à la fin).
On fait pointer le i-1ème nœud sur le nouveau.
On incrémente le nombre de nœuds.
FINSI
FINSI
34 12 53
i
2 3
4
26
Retrait au début de la liste
SI la liste n’est pas vide ALORS
On fait pointer un pointeur sur le premier élément de la liste.
On fait pointer la tête de liste sur le deuxième nœud (NULL s’il
n’y avait qu’un seul nœud).
On détruit le nœud pointé par le pointeur.
On décrémente le nombre de nœuds.
FINSI
34 12 26
2
3
Retrait à la fin de la liste
SI la liste n’est pas vide ALORS
SI la liste ne contient qu’un seul élément ALORS
Retirer au début de la liste.
SINON
On fait pointer un pointeur sur l’élément à l’indice nombre de nœuds – 2.
On détruit le dernier nœud.
On fait pointer l’avant dernier vers NULL.
On décrémente le nombre de nœuds.
FINSI
FINSI
34 12 26
2
3
Retrait à la ième position
SI i ≥ 0 et i < nombre de nœuds de la liste ALORS
SI la liste ne contient qu’un seul élément ALORS
Retirer au début de la liste.
SINON
On fait pointer un pointeur sur l’élément à l’indice i – 1.
On fait pointer un pointeur sur l’élément à l’indice i.
On fait pointer le i-1ème nœud sur le i+1ème nœud (NULL si on détruit le dernier).
On détruit le ième nœud.
On décrémente le nombre de nœuds.
FINSI
FINSI
34 12 26
1 2
3
Les piles
Qu’est ce qu’une pile?
Réponse :
Une pile est une structure de données dans laquelle
on peut ajouter et supprimer des éléments suivant la
règle du dernier arrivé premier sorti ou encore LIFO
(Last In First Out).
int EstVide(Pile P)
{
/* retourne 1 si le nombre d’éléments vaut 0 */
return (P.nb_elem == 0) ? 1 : 0;
}
int EstPleine(Pile P)
{
/* retourne 1 si le nombre d’éléments est supérieur */
/* au nombre d’éléments maximum et 0 sinon */
return (P.nb_elem >= P.nb_elem_max) ? 1 : 0;
}
Les piles
Fonction permettant d’acceder au sommet de la pile:
Points importants
Notion de Complexité;
Tri par sélection;
Tri par insertion;
Tri par bulle.
La notion de complexité
Première passe
On cherche l'élément contenant la plus petite valeur du
tableau à partir du premier élément.
On échange la valeur de cet élément avec celle du premier
élément du tableau.
Deuxième passe
On cherche l'élément contenant la plus petite valeur du
tableau à partir du deuxième élément.
On échange la valeur de cet élément avec celle du
deuxième élément du tableau.
... et ainsi de suite pour chaque élément du tableau jusqu'à
l'avant-dernier.
Le tri par sélection
Fonctionnement du tri par sélection:
Pour i = 1 À n - 1
indice_du_minimum = indice du plus petit élément se
trouvant entre T(i) et T(n) inclusivement
permuter T(i) et T(indice_du_minimum)
Fin Boucle
Le tri par sélection
Fonctionnement du tri par sélection:
Nous pouvons également commencer par chercher l’élément contenant
la plus grande valeur (le maximum) par exemple:
Le tri par sélection
Algorithme du tri par sélection:
PROCEDURE TriSelection(entier *T,entier n) /* on fait un tri ci sur les entiers*/
début
entier k, i, imax, temp;
pour k ←n-1 à 1 pas -1 faire
/* recherche de l’indice du maximum : */
imax←0;
pour i←1 à k pas 1 faire
si T[imax] < T[i] faire
imax←i;
fin faire
/* échange : */
temp←T[k];
T[k]←T[imax];
T[imax]←temp;
fin faire
fin
Le tri par sélection
Exercice:
Première passe
On recule la valeur du deuxième élément dans le tableau
jusqu'à ce que les valeurs des deux premiers éléments
soient ordonnées.
Deuxième passe
On recule la valeur du troisième élément dans le tableau
jusqu'à ce que les valeurs des trois premiers éléments
soient ordonnées.
... et ainsi de suite pour tous les autres éléments du tableau.
Le tri par insertion
Fonctionnement du tri par insertion:
Pour i = 2 À n
insérer l'élément T(i) au bon endroit parmi les i-1 éléments
déjà triés
Fin Pour
Le tri par insertion
Algorithme du tri par insertion:
PROCEDURE TriInsertion(entier *T, entier n)
début
entier k, i, v;
pour k ←1 à n-1 pas 1 faire
v←T[k];
i←k-1;
/* On décale les éléments pour l’insertion */
tant que i≥0 et v < T[i] faire
T[i+1]←T[i];
i←i-1;
fin faire
/* On fait l’insertion proprement dite */
T[i+1]←v;
fin faire
fin
Le tri par insertion
exercice:
Exercice:
Estimer le nombre d’opération à effectuer (la
complexité) lorsqu’on applique un algorithme de tri
par bulle sur un tableau d’entiers de taille n.
C’est tout pour le cours d’Info II