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
| #include <stdio.h>
#include <stdlib.h>
void load(int **dest, int *src, size_t n) {
for (size_t i=0; i < n; i++) dest[i]=&src[i];
}
void affich(int* tab[], const char* const titre, size_t n) {
printf("\n%s\n", titre);
for (size_t i=0; i < n; i++) printf("i=%lu, adr=%p, tab=%d\n", i, tab[i], *tab[i]);
}
void tri(int* tab[], size_t n, char sens) {
int croissant(const void* x, const void *y) {
if (**(int **)x < **(int **)y) return -1;
if (**(int **)x > **(int **)y) return 1;
return 0;
}
int decroissant(const void* x, const void *y) {
if (**(int **)x < **(int **)y) return 1;
if (**(int **)x > **(int **)y) return -1;
return 0;
}
switch (sens) {
case '<': // Sens croissant
qsort(tab, 10, sizeof(int*), croissant);
break;
case '>': // Sens décroissant
qsort(tab, 10, sizeof(int*), decroissant);
break;
}
}
int main() {
int tab[10]={1, 3, 5, 7, 9, 2, 4, 6, 8, 0};
int* croissant[10];
int* decroissant[10];
load(croissant, tab, 10);
load(decroissant, tab, 10);
tri(croissant, 10, '<');
tri(decroissant, 10, '>');
affich(croissant, "croissant", 10);
affich(decroissant, "decroissant", 10);
} |