VMS Help
CRTL, bsearch
*Conan The Librarian
|
Performs a binary search. It searches an array of sorted objects
for a specified object.
Format
#include <stdlib.h>
void *bsearch (const void *key, const void *base, size_t
nmemb, size_t size, int (*compar)
(const void *, const void *));
The bsearch function has variants named _bsearch32 and _bsearch64
for use with 32-bit and 64-bit pointer sizes, respectively.
key
A pointer to the object to be sought in the array. This pointer
should be of type pointer-to-object and cast to type pointer-to-
void.
base
A pointer to the initial member of the array. This pointer should
be of type pointer-to-object and cast to type pointer-to-void.
nmemb
The number of objects in the array.
size
The size of an object, in bytes.
compar
A pointer to the comparison function.
The array must first be sorted in increasing order according to
the specified comparison function pointed to by compar.
Two arguments are passed to the comparison function pointed to
by compar. The two arguments point to the objects being compared.
Depending on whether the first argument is less than, equal to,
or greater than the second argument, the comparison function must
return an integer less than, equal to, or greater than 0.
It is not necessary for the comparison function (compar) to
compare every byte in the array. Therefore, the objects in the
array can contain arbitrary data in addition to the data being
compared.
Since it is declared as type pointer-to-void, the value returned
must be cast or assigned into type pointer-to-object.
x A pointer to the matching member of the array
or a null pointer if no match is found.
NULL Indicates that the key cannot be found in the
array.
#include <stdio.h>
#include <stdlib.h>
#define SSIZE 30
extern int compare(); /* prototype for comparison function */
int array[SSIZE] = {30, 1, 29, 2, 28, 3, 27, 4, 26, 5,
24, 6, 23, 7, 22, 8, 21, 9, 20, 10,
19, 11, 18, 12, 17, 13, 16, 14, 15, 25};
/* This program takes an unsorted array, sorts it using qsort, */
/* and then calls bsearch for each element in the array, */
/* making sure that bsearch returns the correct element. */
main()
{
int i;
int failure = FALSE;
int *rkey;
qsort(array, SSIZE, sizeof (array[0]), &compare);
/* search for each element */
for (i = 0; i < SSIZE - 1; i++) {
/* search array element i */
rkey = bsearch((array + i), array, SSIZE,
sizeof(array[0]), &compare);
/* check for successful search */
if (&array[i] != rkey) {
printf("Not in array, array element %d\n", i);
failure = TRUE;
break;
}
}
if (!failure)
printf("All elements successfully found!\n");
}
/* Simple comparison routine. */
/* */
/* Returns: = 0 if a == b */
/* < 0 if a < b */
/* > 0 if a > b */
int compare(int *a, int *b)
{
return (*a - *b);
}
This example program outputs the following:
All elements successfully found!