Bonsoir,
je m'entraine un peut sur les tries et compléxité et la je bloque sur le trie fusion.
Le tableau ne change pas, j'ai l'impression que la fusion ne se fait pas

pouvez-vous m'indiquer mes erreurs?

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
 
#include <stdlib.h>
#include <stdio.h>
 
#define MAX 4
 
void affiche(int *tab){
  int i;
  for(i=0;i<MAX;i++)
    printf("%d ",tab[i]);
}
 
void fusion(int *tab,int debut,int milieu,int fin){
  int tab1[milieu],tab2[milieu],i,i1=debut-1,i2=debut-1;
  for(i=0;i<milieu;i++){
    tab1[i]=tab[i];
    tab2[i]=tab[milieu+1+i];
  }
 
  for(i=0;(i1<milieu && i2<milieu);i++){
    if(tab1[i1]>tab2[i2])
      tab[i]=tab2[i2++];
    else
      tab[i]=tab1[i1++];
  }
  if(i<fin){
    while(i1<milieu)
      tab[i++]=tab1[i1++];
    while(i2<milieu)
      tab[i++]=tab2[i2++];
  }
}
 
void trieFusion(int *tab,int debut,int fin){
  if(debut>fin){
    trieFusion(tab,debut,((fin+debut)/2));
    trieFusion(tab,((fin+debut)/2)+1,fin);
    fusion(tab,debut,(fin+debut)/2,fin);
  }
}
 
int main(void){
  int tab[]={3,2,1,4};
  printf("Avant trie:\n");
  affiche(tab);
  printf("\n");
  trieFusion(tab,1,MAX);
  printf("Apres trie:\n");
  affiche(tab);
  printf("\n");
  return 0;
}
Merci d'avance pour votre aide.