si tu déclares un tableau statique, tu ne peux pas modifier sa valeur :
donc :
int tableau_1[max_qte/2];
...
tableau_1 = Trier(tableau_1, Milieu);
// Erreur !
Par ailleurs y'a encore pleins d'erreurs dans ton code !!
Et je doute que tu l'aies fait marcher un jour.
Mais...
j'ai corrigé ton code (c'était pas facile), et maintenant ça marche bien !
voilà la solution :
#include <stdio.h>
#include <stdlib.h>
#define N 15
int tab[N] = { 455, 12, 899, 956, 750, 250, 5000, 5, 2, 50, 45, 789, 1564, 3, 19 };
int *Trier(int tableau[], int NbrElements)
{
int Milieu = NbrElements/2;
int *tableau_1;
int *tableau_2;
int index = 0;
int i1 = 0;
int i2 = 0;
int i;
if (NbrElements == 1)
return tableau;
if (NbrElements == 2) {
if (tableau[0] > tableau[1]) {
int temp = tableau[0];
tableau[0] = tableau[1];
tableau[1] = temp;
}
return tableau;
}
tableau_1 = (int *)malloc(Milieu*sizeof(int));
tableau_2 = (int *)malloc((NbrElements-Milieu)*sizeof(int));
for (i=0; i<Milieu; i++)
tableau_1[i] = tableau[i];
for (i=0; i<
NbrElements-Milieu; i++)
tableau_2[i] = tableau[Milieu+i];
// Les tableaux 1 et 2 sont initialisés maintenant
tableau_1 = Trier(tableau_1, Milieu);
tableau_2 = Trier(tableau_2,
NbrElements-Milieu);
// fusion
while(index < NbrElements) {
if((
i1<Milieu && tableau_1[i1] < tableau_2[i2])
|| i2== NbrElements - Milieu ) {
tableau[index] = tableau_1[i1];
i1++;
}
else {
tableau[index] = tableau_
2[
i2];
i2++;
}
index++;
}
free(tableau_1);
free(tableau_2);
return tableau;
}
void main(void)
{
int i;
for(i=0; i< N; i++)
printf("%d%c", tab[i], i==N-1?'n': ' ');
Trier(tab, N);
for(i=0; i< N; i++)
printf("%d%c", tab[i], i==N-1?'n': ' ');
}
j'ai une version différente du tri rapide, qui est plus rapide je pense. Je vais tester ça !
[edit]Edité par jcop le 06-04-2002 à 11:27:13[/edit]