函數(shù)名:bsearch
頭文件:<stdlib.h>
函數(shù)原型:void* bsearch(const void* key,const void *list,size_t *n,size_t *m,
int (*fc)(const void*,const void*));
功能: 用于二分法搜索
參數(shù):const void* key 指向要查找關(guān)鍵字的指針
const void *list 指向按從小到大順序存放元素的表
size_t *n 指定查找表的元素的個數(shù)
size_t *m 指定查找表中每個元素的字節(jié)數(shù)
int (*fc)(const void*,const void*) 一個函數(shù)的指針,此函數(shù)用來比較兩個元素的大小
返回值:如果找到元素則返回指向該元素的指針,否則返回NULL;
程序例:實現(xiàn)二分法搜索元素456,并輸出提示
#include<stdio.h> #include<stdlib.h> #define SIZE(arr) sizeof(arr)/sizeof(int) int arr[]={123,456,789,654,312,714}; typedef int (*fc)(const void*,const void*); int numcmp(const void* p1,const void* p2){ int *pi1=(int*)p1; int *pi2=(int*)p2; return (*pi1-*pi2); } int search(int key){ fc f=numcmp; int *ptr=bsearch(&key,arr,SIZE(arr),sizeof(int),f); return ptr!=NULL; } int main(void){ if(search(456)){ printf("456 is in the list.\n"); }else{ printf("456 isn't in the list\n"); } return 0; }
運行結(jié)果
456 is in the list.
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程