Vous êtes sur la page 1sur 2

Universite de Bordeaux - Coll`ege S&T

LST Mention MI Semestre 2

2013-2014

J1MI2013: Algorithmes et Programmes: feuille 09


Tri fusion
Appliquer le tri fusion `
a une suite de n elements contenus dans un tableau t consiste `a
trier recursivement les deux moities du tableau t[0,n/2[ et t[n/2,n[ 1 , puis `a fusionner les
deux suites ordonnees.
Exemple : le tri fusion applique au tableau t = [7, 3, 5, 2, 4, 1 ] se deroule de la facon suivante.

on consid`ere [7, 3, 5] et on trie recursivement :


on consid`ere [7] : le singleton est trie
on consid`ere [3, 5] et on trie recursivement :
on consid`ere [3] et [5] : chaque singleton est trie,
on fusionne les deux tableaux et on obtient [3, 5]
fusion de deux tableaux [7] et [3, 5] : on obtient [3, 5, 7]
on consid`ere [2, 4, 1] et on trie recursivement :
on consid`ere [2] : le singleton est trie
on consid`ere [ 4, 1] et on trie recursivement :
on consid`ere [4] et [1] : chaque singleton est trie,
on fusionne les deux tableaux et on obtient [1, 4]
fusion des deux tableaux [2] et [1, 4] : on obtient [1, 2, 4]
fusion des deux tableaux [3, 5, 7] et [1, 2, 4] : on obtient [1, 2, 3, 4, 5, 7]
7

fusion
3

fusion

fusion
3

fusion

fusion
1

1. La notation t[a,b[ signifie : le sous tableau de t dont les elements ont un indice i , a i < b

Exercice 1.
au td 6 :

On consid`ere la fonction de fusion de deux tableaux tries en un troisi`eme etudiee

def fusion ( t1 , t2 ):
t = creerTableau ( len ( t1 )+ len ( t2 ))
i1 = 0
i2 = 0
while i1 < len ( t1 ) and i2 < len ( t2 ):
if t1 [ i1 ] < t2 [ i2 ]:
t [ i1 + i2 ] = t1 [ i1 ]
i1 += 1
else :
t [ i1 + i2 ] = t2 [ i2 ]
i2 += 1
while ( i1 < len ( t1 )):
t [ i1 + i2 ] = t1 [ i1 ]
i1 +=1
while ( i2 < len ( t2 )):
t [ i1 + i2 ] = t2 [ i2 ]
i2 +=1
return t

En sinspirant de cet algorithme, ecrire une fonction fusionner(t,debut,milieu,fin) qui modifie t en fusionnant des copies des deux sous tableaux tries t[debut,milieu[ et t[milieu,fin[.
Exemples :
apres fusionner (t ,3 ,6 ,9) avec t = [4 , 5 , 7 , 1 , 4 , 6 , 3 , 5 , 7 , 100 , 15]
on a t =[4 , 5 , 7 , 1 , 3 , 4 , 5 , 6 , 7 , 100 , 15]
apres fusionner (t ,3 ,6 ,9) avec t = [4 , 5 , 7 , 1 , 4 , 8 , 3 , 5 , 7 , 100 , 15]
on a t =[4 , 5 , 7 , 1 , 3 , 4 , 5 , 7 , 8 , 100 , 15]
apres fusionner (t ,0 ,3 ,9) avec t =[1 , 5 , 7 , 1 , 4 , 8 , 9 , 12 , 100]
on a t = [1 , 1 , 4 , 5 , 7 , 8 , 9 , 12 , 100]

Exercice 2.
Ecrire
une fonction recursive triFusionRec(t,debut,fin) qui trie recursivement le tableau t entre les indices debut et fin-1.
Exercice 3.

Ecrire
une fonction triFusion(t) qui trie le tableau.

Travaux pratiques
Exercice 1. On desire maintenant utiliser pour la fusion un algorithme proche de celui etudie
pour inserer un tableau trie dans un tableau trie (voir td6). Reecrire les fonctions fusionnerBis,
triFusionRecBis et triFusionBis
Exercice 2.

Tris particuliers :

1. On consid`ere le cas particulier o`


u la suite est constituee uniquement de 0 et de 1. Ecrire
une fonction tri_0_1 de complexite lineaire pour ordonner les elements du tableau en
mettant les 0 avant les 1.
2. Generaliser le tri precedent au cas o`
u la suite est constituee de 2 valeurs distinctes (non
necessairement 0 et 1).
2

Vous aimerez peut-être aussi