tri fusion sur des chaines de char

master
parent 6dbe176f62
commit 4dd6ef0522

@ -1,7 +1,8 @@
#include "../includes/recherche.h"
#include "../includes/structures.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fusion(int R[], int tR, int S[], int tS, int T[])
void fusion(char *R[], int tR, char *S[], int tS, char *T[])
{
int i;
int j;
@ -10,9 +11,9 @@ void fusion(int R[], int tR, int S[], int tS, int T[])
i = 0;
j = 0;
k = 0;
while (i < tR && j < tS)
while (i < tR && j < tS)
{
if (R[i] < S[j])
if (strcmp(R[i], S[j]) < 0)
{
T[k] = R[i];
i++;
@ -24,14 +25,12 @@ void fusion(int R[], int tR, int S[], int tS, int T[])
}
k++;
}
while (i < tR)
{
T[k] = R[i];
i++;
k++;
}
while (j < tS)
{
T[k] = S[j];
@ -40,10 +39,10 @@ void fusion(int R[], int tR, int S[], int tS, int T[])
}
}
void copy(int T[], int i, int j, int R[])
void copy(char *T[], int i, int j, char *R[])
{
int k;
k = 0;
while (i < j)
{
@ -53,15 +52,15 @@ void copy(int T[], int i, int j, int R[])
}
}
void triFusion(int T[], int tlog)
void triFusion(char *T[], int tlog)
{
int *R;
int *S;
char **R;
char **S;
if (tlog <= 1)
return;
R = (int *)malloc(sizeof(int) * (tlog / 2));
S = (int *)malloc(sizeof(int) * (tlog - tlog / 2));
R = (char **)malloc(sizeof(char *) * (tlog / 2));
S = (char **)malloc(sizeof(char *) * (tlog - tlog / 2));
if (!R || !S)
exit(1);
copy (T, 0, tlog / 2, R);
@ -69,27 +68,28 @@ void triFusion(int T[], int tlog)
triFusion (R, tlog / 2);
triFusion (S, tlog - tlog / 2);
fusion (R, tlog / 2, S, tlog - tlog / 2, T);
free(R);
free(S);
}
/*
int main(void)
int main(void)
{
int tab[10] = {10, 0, 2, 15, 7, 5, 68, 1, 7, 8};
int tlog = 10;
int i;
char *tab[5] = {"banana", "apple", "orange", "grape", "cherry"};
int tlog = 5;
int i;
printf("Avant le tri : \n\t");
for (i = 0; i < tlog; i++)
printf("%d, ", tab[i]);
printf("%s, ", tab[i]);
triFusion(tab, tlog);
printf("\nApres le tri : \n\t");
for (i = 0; i < tlog; i++)
printf("%d, ", tab[i]);
printf("%s, ", tab[i]);
printf("\n");
return (0);
return 0;
}
*/

Loading…
Cancel
Save