bsearch - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# bsearch

From cppreference.com
< c‎ | algorithm

Defined in header `<stdlib.h>` |  |
void* bsearch( const void* key, const void* ptr, size_t count, size_t size, int (*comp)(const void*, const void*) ); |  |

Finds an element equal to element pointed to by `key` in a sorted array pointed to by `ptr`. The array contains `count` elements of `size` bytes. The elements are compared using function pointed to by `comp`.

The behavior is undefined if the array is not already sorted in ascending order according to the same criteria that `comp` uses.

If the array contains several elements that `comp` would indicate as equal to the element searched for, then it is undefined which element the function will return as the result.

### [edit] Parameters

key | - | pointer to the element to search for
ptr | - | pointer to the array to examine
count | - | number of element in the array
size | - | size of each element in the array in bytes
comp | - | comparison function which returns ​a negative integer value if the first argument is less than the second, a positive integer value if the first argument is greater than the second and zero if the arguments are equal. `key` is passed as the first argument, an element from the array as the second. The signature of the comparison function should be equivalent to the following: int cmp(const void *a, const void *b); The function must not modify the objects passed to it. ​

### [edit] Return value

Pointer to the found element or NULL if such element has not been found.

### [edit] Example

Run this code

    #include <stdlib.h>
    #include <stdio.h>

    struct data {
        int nr;
        char const *value;
    } dat[] = {
        {1, "Foo"}, {2, "Bar"}, {3, "Hello"}, {4, "World"}
    };

    int data_cmp(void const *lhs, void const *rhs)
    {
        struct data const *const l = lhs;
        struct data const *const r = rhs;
        return l->nr - r->nr;
    }

    int main(void)
    {
        struct data key = { .nr = 3 };
        struct data const *res = bsearch(&key, dat, sizeof(dat)/sizeof(dat[0]),
                                       sizeof(dat[0]), data_cmp);
        if (!res) {
            printf("No %d not found\n", key.nr);
        } else {
            printf("No %d: %s\n", res->nr, res->value);
        }
    }

Output:

    No 3: Hello

### [edit] See also

qsort | sorts a range of elements with unspecified type (function) [edit]
C++ documentation for bsearch

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/algorithm/bsearch&oldid=65048"