C语言中 bsearch 包含在<stdlib.h>头文件中,此函数可以根据你给的条件实现二分查找,如果找到元素则返回指向该元素的指针,否则返回NULL;对于有多个元素匹配成功的情况,bsearch()未定义返回哪一个。使用 bsearch 函数也要自己定义比较子函数。

void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*cmp)(const void *, const void *));

key—— 指向要查找的元素

base—— 指向进行查找的数组

num ——数组中元素的个数

size—— 数组中每个元素的大小,一般用sizeof( T )表示,T一般是数组的元素类型

cmp ——比较两个元素的函数,定义比较规则。需要注意的是,查找数组必须是经过预先排序的,而排序的规则要和比较子函数cmp的规则相同。


比如:
typedef struct
{
 
char p1[11];
 
char p2[11];
}
T;
T str[size];
int b_cmp(const void *a, const void* b)//定义(b_cmp)可以随便改
{
 
return strcmp((char*)a, ((T*)b)->p2);
}

char s[10];
………………
………………
………………
*ptr = (T*)bsearch(s, str, i, sizeof(T), b_cmp);
s是要查找的对象,而str是供查找的数组

引用于slyar