Vous êtes sur la page 1sur 4

Informatique

Cours 4.1
Le tri des listes est un des lments qui permet d'accder aux donnes rapidement.

Tri par insertion

Exemple de requtes possibles sur des listes tries :


- rechercher si un lment est dans un tableau (recherche d'un mot dans une liste de mots clefs pour
les mtadonnes de pages internet),
- dterminer la mdiane dune liste de nombres(exemple : dans un concours, dterminer la note qui
dpartage les candidats en deux groupes de mme effectif),
- slectionner une sous-liste dlments conscutifs (exemple : afficher seulement les relevs
temporels compris entre l'instant 1s et l'instant 2s),

1 Algorithme de recherche dans une liste


1.1 Recherche dans une liste non trie
Algorithme Recherche de x dans L
Entres : lment x et liste L
Sortie : s=Vrai si x est dans L et Faux sinon
n Nombre d'lments de L

def recherche (L,x):


# Entres : lment x et liste L
# Sortie : s=True si x dans L et False sinon
n = len (L)

s Faux
c0
Tant que (c < n et s=Faux) Faire
Si L[c]=x alors
s Vrai
c c+1
Fin tant que

s = False
# s : Faux par dfaut
c=0
# initialisation de l'indexe
while (c<n and s==False):
if L[c]==x :
s = True
c = c+1
return s

Renvoyer s
Fin de l'algorithme Recherche de x dans L

Appel de la fonction recherche:


>>> liste = [0,2,1]
>>> recherche (liste,2)
True
Dans le pire des cas, l'lment n'est pas prsent dans la liste la complexit temporelle correspond C(n)=n
boucles (complexit linaire).

Lyce Jules Ferry Cannes

Page 1 sur 4

TSI1

Informatique

Cours 4.1

Tri par insertion

1.2 Complexit dans une liste trie


Algorithme Recherche dichotomique
Entres : lment x et liste L
Sortie : s=Vrai si x est dans L et Faux sinon
n Nombre d'lments de L
g 0
d n-1
k (g+d) div 2
Tant que g d Faire
Si L[k]<x Alors
g k+1
Sinon :
Si L[k]>x Alors
d k
Sinon :
d k
g k
Fin Si
k (g+d) div 2
Fin Tant que
Si L[g]=x Alors
s True
Sinon
s False
Fin Si
Renvoyer s
Fin de Recherche dichotomique

def Recherche_dichotomique (L,x):


# Entre : liste L, x lment cherch
# Sortie : s=True si x dans L et False sinon
n=len(L)
g=0
# premier indice de L : 0
d=n-1
# dernier indice de L : n-1
k=(g+d)//2
# dichotomie
while g!=d:
if L[k]<x: # x est droite du milieu
g=k+1
else:
if L[k]>x:
# x est gauche du milieu
d=k
else:
# x est au milieu
g=k
d=k
k=(g+d)//2
if L[g]==x:
# Affectation de la sortie
s=True
else:
s=False
return s
Appel de la fonction Recherche_dichotomique :
>>> liste_triee=[0,1,2]
>>> Recherche_dichotomique(liste_triee,2)
True

Dans le pire des cas, l'lment n'est pas prsent dans la liste la complexit temporelle correspond k
boucles tels que 2 soit C(n) = log boucles (complexit logarithmique).

1.3 Conclusion
Pour le traitement de grandes quantits de donnes (base de donne internet, relevs haute frquence,
rsultats de calculs par lments finis), l'algorithme a un impact important sur les dures de traitement.
Exemple pour 10 pages trouves un moteur de recherche internet met 0,5 s.
Pour une dure unitaire d'opration de 10ns si n=10 donnes :
- Un algorithme linaire conduit une dure de traitement de 10s.
- Un algorithme logarithmique log 10 30 conduit une dure de traitement de 300ns
Pour afficher rapidement des donnes nombreuses, il est donc indispensable de trier les donnes avant les
requtes.

Lyce Jules Ferry Cannes

Page 2 sur 4

TSI1

Informatique

Cours 4.1

Tri par insertion

2 Tris
2.1 Principe du tri
On se donne un tableau t, dont les lments t[0]; t[1]; t[2]; ; t[n - 1] sont comparables.
Les t[i] peuvent tre : des entiers, des flottants, des lettres de lalphabet
Un tableau t est tri par ordre croissant si : t[0] t[1] t[n-1]:
Exemple : si t = ['C','A','T','A, 'Z','U','M'], on veut transformer t en t0 = ['A','A', 'C','M','T','U', 'Z']:
Trois algorithmes sont au programme : le "tri par insertion", le "tri rapide" et le "tri fusion".
Dautres algorithmes hors programme existent : "tri par slection", "tri bulles" . . .
Chacun de ces tris se base sur une suite de comparaisons dlments.
Mais ces diffrents algorithmes ne sont pas quivalents, ils ont des complexits diffrentes, cest--dire
que certains ncessitent plus de comparaisons dlments que dautres, ou plus daffectations.

2.2 Tri par insertion


On insre successivement chaque lment dans lensemble des lments dj tris.
Ce tri seffectue en place : pas besoin de crer un autre tableau que celui que lon trie.
Le cot en mmoire est constant.
Algorithme Tri par insertion
Entres : liste T (tableau de n nombres; n 2)
Sortie : liste T trie par ordre croissant
Pour i de 1 n-1 faire
xT[i]
j i
Tant que j> 0 et T[j-1] > x faire
j j-1
Fin Tant que
Pour k de i-1 j par pas de -1 faire
T[k +1] T[k]
Fin Pour
T[j] x
Fin Pour
Fin de Tri par insertion

def Tri_insertion (T):


# Entre : liste T de n nombres (n 2)
# Sortie : liste T trie par ordre croissant
n = len(T)
for i in range(1,n): # tri de tous les lments
x = T[i]
j=i
# j : position trie de l'lment i
while j>0 and T[j-1] > x :
j=j-1
for k in range (i-1,(j-1),-1):
T[k+1] = T[k] # dcalages de j vers i
T[j] = x
return T
Appel de la fonction Tri_insertion :
>>> liste=[5, 2, 3, 1, 4]
>>> Tri_insertion (liste)
[1,2,3,4,5]

exemple 1 :
3

Lyce Jules Ferry Cannes

Page 3 sur 4

TSI1

Informatique

Cours 4

Tri par insertion

exemple 1 (rpt pour des raisons de lecture):


3

Nombre de comparaisons effectues pour trier par insertion un tableau de longueur n :


en tout, on fait n - 1 insertions (celle de t[1], t[2] t[n - 1]).
pour chaque insertion de t[i ] dans t[0 : i ], on fait
- 1 comparaison dans le meilleur des cas (dj tri):
o Est-ce que t[i ] > t[i - 1] ?
- i comparaisons dans le pire des cas (tri en sens inverse):
o Est-ce que t[i ] > t[i - 1] ?
o Est-ce que t[i ] > t[i - 2] ?

o Est-ce que t[i ] > t[0] ?


o Est-ce quon est arriv en bout de liste ?
Total :
1 + + 1 = n - 1 comparaisons dans le meilleur cas (liste trie).
1 + + i + + n-1 = ( 1) ~ n/2 comparaisons dans le pire (liste trie en sens inverse).

comparaisons
affectations

meilleur cas pire cas


n
n/2
n
n/2

Le tri par insertion a donc une complexit quadratique (en O(n)), donc mdiocre.
Nanmoins le tri par insertion reste un des algorithmes les plus performants lorsque la liste est presque
trie : complexit linaire.

Ressources :
Damien Broizat
Patrick Beynet UPSTI-

Lyce Jules Ferry Cannes

Page 4 sur 4

TSI2

Vous aimerez peut-être aussi