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;
} |
Partager