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
| #include <stdio.h>
#include <stdlib.h>
void affiche(char *txt, int *tab[2], size_t nb)
{
int i;
for (i=0; i < nb; i++)
printf("%s: ligne %d: %d - %d - %d\n", txt, i, tab[i][0], tab[i][1], tab[i][2]);
fputc('\n', stdout);
}
int cmp(const void *t1, const void *t2)
{
int i;
for (i=2; i >= 0; i--)
{
if ((*(int **)t1)[i] < (*(int **)t2)[i])
return -1;
if ((*(int **)t1)[i] > (*(int **)t2)[i])
return 1;
}
return 0;
}
int main()
{
int tab[][3]={
{5, 2, 2},
{4, 2, 2},
{8, 3, 2},
{10, 3, 2},
{9, 2, 2},
{9, 3, 4},
{5, 3, 4},
{4, 3, 4},
{7, 4, 18},
{8, 4, 18},
{9, 4, 18},
{10, 4, 18},
{5, 4, 18},
{8, 5, 48},
{9, 5, 48},
};
// Un tableau [][] étant invariant, il faut le recopier dans un tableau de pointeurs
int *tri[15];
int i;
for (i=0; i < 15; i++)
tri[i]=tab[i];
affiche("avant tri", tri, 15);
qsort(tri, 15, sizeof(int*), cmp);
affiche("après tri", tri, 15);
} |
Partager