Bonsoir, je suis en train de programmer l'algorithme de tri fusion en C et je me casse les dents sur un problème que je n'arrive pas à régler. J'ai deux fonctions recursives : une pour fusionner deux tableaux triés en un seul tableau et l'autre qui est l'algorithme de tri fusion à proprement parler. La fonction "fusion de deux tableaux triés" fonctionne mais impossible de l'utiliser pour faire marcher le triFusion.
Voila mes fonctions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "fonctions.h"
 
 
void  mkCopy ( int *tab ,int *copie , int size ){
	for (int i =0; i< size ; i++){
		copie[i]=tab[i];
	}
}
 
 
 
void fusion ( int *tab , int *copie , int debut , int x , int milieu , int y , int fin , int incr ){
	if (x == milieu){		
 
		for (int i = debut ; i<=fin ; i++ ){
			printf ( "%d\t" ,  tab[i] ); 
		}
		printf ( "\n\n");
		return;	
	}
	if (y == fin+1 ){
 
		for (int i =0; i < milieu-x ; i++){
			tab[ debut + incr + i] = copie [x+i];
		}
 
		for (int i = debut   ; i<=fin ; i++ ){
			printf ( "%d\t" ,  tab[i] );
		}
		printf ( "\n\n");
		return; 
	}
	if (copie[x]<copie[y]){
		tab [ debut + incr ]=copie[x];	
		fusion ( tab , copie , debut , x+1 ,milieu , y , fin  , incr+1);
	}
 
	if ( copie [y]<= copie[x]){
		tab[debut+incr]=copie[y];
		fusion ( tab , copie , debut , x , milieu , y+1 , fin , incr +1 );
      	} 
}	
 
 
 
void triFusion ( int *tab , int debut , int fin , int size){
	int *copie=malloc(sizeof(int)*size);
	mkCopy ( tab , copie , size );	
	triFusionAux ( tab , copie , debut , fin );
	return;
}
 
 
void triFusionAux ( int *tab , int *copie , int debut , int fin ){
	if ( debut < fin ){
		int milieu = (debut+fin)/2;
		triFusionAux ( tab, copie, debut, milieu);
		triFusionAux (tab , copie , milieu + 1 , fin);
		printf ( "Debut = %d\t, milieu=%d\t, fin=%d\t\t", debut , milieu+1 , fin);
		fusion ( tab ,copie, debut , debut , milieu + 1 , milieu + 1 , fin , 0);
	}
	return;
}
et voila le main :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
#include <string.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "fonctions.h"
 
 
int main (){
	int copie[5];
	int tib [5]={3,7,2,6,4};
	int tab [5]={2,3,7,4,6};
	triFusion( tib , 0 ,4,5);
	mkCopy ( tab , copie ,5 );
	fusion ( tab , copie , 0 , 0 ,3,3,4,  0);
	for (int i=0 ; i<5;  i++){
	printf ( "%d\t", tib[i]);
	}
	printf ("\n");
	for (int i = 0 ; i<5 ; i++){
		printf  ("%d\t", tab[i]);
	}
	printf("\n");
 
	return 0;
 
}
Les prints placés aux différents endroits affichent des choses que je n'explique pas et que je ne comprends pas . Est-ce quelqu'un peut m'aider svp ?? Merci d'avance.