+#include <stdio.h>
+#include <stdlib.h>
+
+void AfficheTab(int T[], int n) {
+ for (int i = 0; i < n; i++) {
+ printf("T[%d]=%d\n", i, T[i]);
+ }
+}
+
+void TriFusion(int T[], int n) {
+ int i = 0, j = 0, k = 0;
+ int* T1;
+ int* T2;
+
+ T1 = malloc(n/2*sizeof(int));
+ T2 = malloc((n - n/2)*sizeof(int));
+
+ if (n > 1) {
+ for (int i = 0; i < n/2; i++) {
+ T1[i] = T[i];
+ T2[i] = T[i + n/2];
+ }
+ TriFusion(T1, n/2);
+ TriFusion(T2, n/2);
+ while (k < n/2 && j < n/2) {
+ if (T1[k] <= T2[j]) {
+ T[i] = T1[k];
+ i++;
+ k++;
+ } else {
+ T[i] = T2[j];
+ i++;
+ j++;
+ }
+ }
+ while (k < n/2) {
+ T[i] = T1[k];
+ i++;
+ k++;
+ }
+ while (j < n/2) {
+ T[i] = T2[j];
+ i++;
+ j++;
+ }
+ free(T1);
+ free(T2);
+ }
+}
+
+int main() {
+ int T[] = {4, 2, 7, 3, 8, 1, 6, 5};
+ int tabSize = sizeof(T)/sizeof(T[0]);
+
+ AfficheTab(T, tabSize);
+
+ TriFusion(T,tabSize);
+
+ AfficheTab(T, tabSize);
+
+ return 0;
+}