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