当前位置: C语言 -- 标准库 -- <stdlib.h> -- bsearch

bsearch函数


概要:
#include <stdlib.h>
void *bsearch(const void *key, const void *base,
      size_t nmemb, size_t size,
      int (*compar)(const void *, const void *));

描述:

该函数搜索数组,寻找与参数key指向对象相匹配的元素。参数base指向数组的初始元素,参数nmemb指定数组长度,参数size指定单个数组元素的大小,参数compar指向比较函数,该比较函数将参数key指向对象与数组元素进行比较。数组中所有元素按从小到大的顺序排列(实际上这意味着整个数组已经根据比较函数进行了排序。)。


参数compar指向比较函数的函数原型如下所示:

int (*compar)(const void *pKey, const void *pElement);

参数pKey与参数key指向相同的对象,参数pElement指向搜索数组的数组元素。如果参数pKey指向的对象小于、等于或者大于数组元素,比较函数返回一个小于、等于或者大于0的整数。


ISO/IEC 9899:2018标准定义了该函数的安全版本bsearch_s


参数:
const void *key

指向搜索对象的指针。

const void *base

指向数组初始元素的指针。

size_t nmemb

数组长度。

size_t size

单个数组元素的字节数。

int (*compar)(const void *, const void *)

指向比较函数的指针。


返回值:

如果发现与参数key指向对象相匹配的元素,函数返回指向该元素的指针;如果存在多个匹配元素,ISO/IEC 9899:2018标准未明确说明匹配哪个元素。如果未发现与参数key指向对象相匹配的元素,函数返回空指针。


范例:
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 
/*函数bsearch范例*/

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

#define LENGTH 5

int funcCompare(const void *x, const void *y)
{
    return (*(int *)x-*(int *)y);
}

int main(void)
{
    int number[LENGTH] = {10, -5, 0, 25, 3};
    int target = 25;

    qsort(number, LENGTH, sizeof(int), funcCompare);
    if(bsearch(&target, number, LENGTH, sizeof(int), funcCompare)!=NULL)
        printf("%d is found.\n", target);
    else
        printf("%d is not found.\n", target);

    return 0;
}


输出:

25 is found.


相关内容:
qsort 对数组元素进行排序的函数。