C語言中 bsearch 包含在<stdlib.h>頭文件中,此函數(shù)可以根據(jù)你給的條件實現(xiàn)二分查找,如果找到元素則返回指向該元素的指針,否則返回NULL;對于有多個元素匹配成功的情況,bsearch()未定義返回哪一個。使用 bsearch 函數(shù)也要自己定義比較子函數(shù)。
void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*cmp)(const void *, const void *));
key—— 指向要查找的元素
base—— 指向進(jìn)行查找的數(shù)組
num ——數(shù)組中元素的個數(shù)
size—— 數(shù)組中每個元素的大小,一般用sizeof( T )表示,T一般是數(shù)組的元素類型
cmp ——比較兩個元素的函數(shù),定義比較規(guī)則。需要注意的是,查找數(shù)組必須是經(jīng)過預(yù)先排序的,而排序的規(guī)則要和比較子函數(shù)cmp的規(guī)則相同。
比如:
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];
………………
………………
………………
T *ptr = (T*)bsearch(s, str, i, sizeof(T), b_cmp);
s是要查找的對象,而str是供查找的數(shù)組引用于slyar