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
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DBG 0
static intswap (int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void Tri_int(int *tabTri, size_t nbobjet, int(*compare)(void const *, void const *))
{
// Tri à bulle
size_t i;
int *pa = tabTri;
for (i = 0; i < nbobjet; i++)
{
size_t j;
for (j = 1;j < nbobjet - i; j++)
{
if (compare(pa + (j - 0), pa + (j - 1)) < 0)
{
intswap(pa + (j - 0), pa + (j - 1));
}
}
}
}
static int compare (void const *a, void const *b)
{
int const *pa = a;
int const *pb = b;
#if DBG
printf ("*pa=%3d *pb=%3d\n", *pa, *pb);
#endif
return *pa - *pb;
}
static display (int *a, size_t n)
{
size_t i;
for (i = 0; i < n; i++)
{
printf ("%3d", a[i]);
}
printf ("\n");
}
int main (void)
{
int a[] =
{
4, 2, 6, -1, 5, 4, 6, 2, 5, 7, 3
};
Tri_int(a, sizeof a / sizeof * a, compare) ;
display(a, sizeof a / sizeof * a);
return 0;
} |
Partager