Fiche Tri Fusion
Fiche Tri Fusion
Fiche Tri Fusion
14 return res;
Pour remplir aléatoirement une telle structure : 15 }
8 }
res->data[i] = t->data[debut+i];
Complexité du tri fusion
9 return res ; Supposons d’abord que la taille du tableau initial est 𝑁 = 2𝑝 une puissance de 2. On obtient
10 } alors une complexité (évaluée par le nombre de tests) :
On fusionne deux tableaux déjà triés selon la méthode standard. Ne pas oublier de compléter
1 si N = 1(p = 0)
à la fin par les éléments du tableau non encore totalement consommé. 𝐶(𝑁) = {
2𝐶 ( 𝑁2 ) + 𝑁 sinon
1 intarray_t* fusion(intarray_t* t1, intarray_t* t2) C
(deux appels récursifs avec des tableaux de taille divisée par 2, plus le coût de la fusion).
2 {
Si on réécrit :
3 intarray_t* res = new_intarray(t1->length + t2->length);
4 int i=0, i1=0, i2=0;
1 si p = 0
5 while (i1 < t1->length && i2 < t2->length) 𝐶 (2𝑝 ) = {
2𝐶 (2𝑝−1 ) + 2𝑝 sinon
MP2I — 2023 – 2024 Fiche Memo Tri Fusion - Gérard Rozsavolgyi LIV, Valbonne
𝐶 (2𝑝 ) ⎧1 si p = 0
= ⎨ 𝐶(2𝑝−1 )
2𝑝
⎩ 2𝑝−1 + 1 sinon
𝐶(2𝑝 )
En posant 𝑢𝑝 = 2𝑝
on a alors :
1 si p = 0
𝑢𝑝 = {
𝑢𝑝−1 + 1 sinon
On reconnaît une suite arithmétique, dont on peut calculer le terme général 𝑢𝑝 = 1 + 𝑝, d’où
il vient 𝐶 (2𝑝 ) = 2𝑝 𝑢𝑝 = 𝑝 ⋅ 2𝑝 + 𝑜 (2𝑝 ). Pour repasser ”en N ”, il suffit de s’apercevoir que
𝑝 = log(𝑁), et donc on a finalement :