void* bsearch (const void* key, const void* base, size_t num, size_t size, int (*compar)(const void*,const void*));
void* pointer to a matching element, if found.void*.void*.1
int compar (const void* pkey, const void* pelem);
const void*). The function shall return (in a stable and transitive manner):| return value | meaning |
|---|---|
<0 | The element pointed to by pkey goes before the element pointed to by pelem |
0 | The element pointed to by pkey is equivalent to the element pointed to by pelem |
>0 | The element pointed to by pkey goes after the element pointed to by pelem |
1
2
3
4
5
6
int compareMyType (const void * a, const void * b)
{
if ( *(MyType*)a < *(MyType*)b ) return -1;
if ( *(MyType*)a == *(MyType*)b ) return 0;
if ( *(MyType*)a > *(MyType*)b ) return 1;
}
0), this may point to any of them (not necessarily the first one).1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* bsearch example */
#include <stdio.h> /* printf */
#include <stdlib.h> /* qsort, bsearch, NULL */
int compareints (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int values[] = { 50, 20, 60, 40, 10, 30 };
int main ()
{
int * pItem;
int key = 40;
qsort (values, 6, sizeof (int), compareints);
pItem = (int*) bsearch (&key, values, 6, sizeof (int), compareints);
if (pItem!=NULL)
printf ("%d is in the array.\n",*pItem);
else
printf ("%d is not in the array.\n",key);
return 0;
}
int values and returns the result of subtracting their pointed values, which gives 0 as result if they are equal, a positive result if the value pointed to by a is greater than the one pointed to by b or a negative result if the value pointed to by b is greater.40 is in the array.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* bsearch example with strings */
#include <stdio.h> /* printf */
#include <stdlib.h> /* qsort, bsearch, NULL */
#include <string.h> /* strcmp */
char strvalues[][20] = {"some","example","strings","here"};
int main ()
{
char * pItem;
char key[20] = "example";
/* sort elements in array: */
qsort (strvalues, 4, 20, (int(*)(const void*,const void*)) strcmp);
/* search for the key: */
pItem = (char*) bsearch (key, strvalues, 4, 20, (int(*)(const void*,const void*)) strcmp);
if (pItem!=NULL)
printf ("%s is in the array.\n",pItem);
else
printf ("%s is not in the array.\n",key);
return 0;
}
example is in the array.
log2(num)+2 times.