Posted on 2009-07-21 18:14
Prayer 閱讀(583)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++
函數名: bsearch
功 能: 二分法搜索
用 法: void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *));
語法:
#include <stdlib.h> void *bsearch(
const void *key, const void *buf, size_t num, size_t size, int
(*compare)(const void *, const void *) );
功能: 函數用折半查找法在從數組元素buf[0]到buf[num-1]
匹配參數key。如果函數compare 的第一個參數小于第二個參數,返回負值;如果等于返回零值;如果大于返回正值。數組buf
中的元素應以升序排列。函數bsearch()的返回值是指向匹配項,如果沒有發現匹配項,返回NULL
程序例:
#include <stdlib.h>
#include <stdio.h>
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
int numarray[] = {123, 145, 512, 627, 800, 933};
int numeric (const int *p1, const int *p2){
return(*p1 - *p2);
}
int lookup(int key){
int *itemptr;
/* The cast of (int(*)(const void *,const void*))
is needed to avoid a type mismatch error at
compile time */
itemptr = (int *)bsearch (&key, numarray, NELEMS(numarray),
sizeof(int), (int(*)(const void *,const void *))numeric);
return (itemptr != NULL);
}
int main(void){
if (lookup(512)){
printf("512 is in the table.\n");
}
else{
printf("512 isn't in the table.\n");
}
return 0;
}