Newer
Older
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
69
70
71
72
73
74
75
#include <stdio.h>
#include <stdlib.h>
void copierTableau(long* dest,long* src,size_t n){
for(size_t i = 0;i < n;i++){
dest[i] = src[i];
}
}
void fusion(long* A,size_t p,size_t q,size_t r){
size_t n1 = q-p;
size_t n2 = r-q;
long* Ag = malloc(n1*sizeof(long));
long* Ad = malloc(n2*sizeof(long));
copierTableau(Ag,A+p,n1);
copierTableau(Ad,A+q,n2);
size_t indG = 0;
size_t indD = 0;
size_t i = p;
while(i < r){
if(indG == n1){
A[i] = Ad[indD];
indD++;
}else if(indD == n2){
A[i] = Ag[indG];
indG++;
}else if(Ag[indG] < Ad[indD]){
A[i] = Ag[indG];
indG++;
}else{
A[i] = Ad[indD];
indD++;
}
i++;
}
free(Ad);
free(Ag);
}
void sousTriFusion(long* A,size_t p,size_t r){
if(p+1 < r){
size_t q = (p+r)/2;
sousTriFusion(A,p,q);
sousTriFusion(A,q,r);
fusion(A,p,q,r);
}
}
void triFusion(long* A,size_t n){
sousTriFusion(A,0,n);
}
void printTab(long* A,size_t n){
printf("{");
for(size_t i = 0;i < n;i++){
if(i != 0){
printf(",");
}
printf("%ld",A[i]);
}
printf("}\n");
}
int main(int argc,char** argv){
long* A = malloc((argc-1)*sizeof(long));
for(size_t i = 0;i < argc-1;i++){
A[i] = atol(argv[i+1]);
}
printf("Tableau d'entrée: ");
printTab(A,argc-1);
triFusion(A,argc-1);
printf("Tableau de sortie: ");
printTab(A,argc-1);
free(A);
}