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
| #include <stdio.h>
#include <stdlib.h>
int find(unsigned long *tab, unsigned long need)
{
unsigned long i;
unsigned long *deb;
unsigned long *fin;
unsigned short pas;
if (*tab == need)
return 0;
i=0;
deb=tab;
for (pas=100; pas > 0; pas=pas >> 1)
{
fin=deb;
while (*fin < need && (fin - tab) < 500000)
{
deb=fin;
fin=fin + pas;
i++;
printf("i=%lu, pas=%hu, [%lu-%lu], need=%lu\n", i, pas, *deb, *fin, need);
if (*fin == need)
return fin - tab;
}
}
printf("i=%lu, pas=%d, [%lu-%lu], need=%lu\n", i, pas, *deb, *fin, need);
return (-1);
}
main() {
srandom(getpid());
unsigned long tab[500000];
unsigned long i;
unsigned long need;
for (i=0; i < 500000; i++)
tab[i]=i + 1;
// Mettre, selon son choix, la ligne que l'on veut en dernier
// Ca permettra de faire des tests différents
need=tab[0]; // Test recherche premier élément
need=tab[500000-1]; // Test recherche dernier élément
need=random() + 500000; // Test recherche élément non présent
need=random() % 500000; // Test recherche élément aléatoire
if ((i=find(tab, need)) != -1)
printf("need: %lu => tab[%lu]=%lu\n", need, i, tab[i]);
else
printf("need: %lu => rien\n", need);
} |
Partager