📅  最后修改于: 2020-09-25 08:47:56             🧑  作者: Mango
bsearch() 函数要求所有小于要在数组中左侧搜索的元素的元素。
同样,所有大于要搜索元素的元素都必须位于数组中它的右侧。如果数组以升序排序,则可以满足此要求。
void* bsearch (const void* key, const void* base, size_t num, size_t size, int (*compare)(const void*,const void*));
该函数在
bsearch() 函数在数组base
搜索key
。所有小于key
元素必须出现在数组base
前面。同样,所有大于key的元素必须出现在base
。
为了执行搜索时,bsearch() 函数使得一系列调用由指向的函数的compare
与key
作为第一个参数,并从所述阵列的第二个参数的元素。
key
作为第一个参数传递,数组中的元素作为第二个参数传递。比较函数的原型如下所示:
int compare(const void* a, const void* b);
bsearch() 函数返回:
#include
#include
using namespace std;
int compare(const void* a, const void* b)
{
const int* x = (int*) a;
const int* y = (int*) b;
return (*x - *y);
}
int main()
{
const int num = 10;
int arr[num] = {5,9,10,14,16,19,21,26,29,31};
int key1 = 10;
int *p1 = (int*)bsearch(&key1,arr,num,sizeof(int),compare);
if(p1 == NULL)
cout << key1 << " not found " << endl;
else
cout << key1 << " found at position " << (p1-arr) << endl;
int key2 = 15;
int *p2 = (int*)bsearch(&key2,arr,num,sizeof(int),compare);
if(p2 == NULL)
cout << key2 << " not found " << endl;
else
cout << key2 << " found at position " << (p2-arr) << endl;
return 0;
}
运行该程序时,输出为:
10 found at position 2
15 not found
#include
#include
using namespace std;
int compare(const void* a, const void* b)
{
const int* x = (int*) a;
const int* y = (int*) b;
return (*x - *y);
}
int main()
{
const int num = 10;
int arr[num] = {2,3,5,7,8,10,14,14,14,15};
int key = 14;
int *p = (int*)bsearch(&key,arr,num,sizeof(int),compare);
if(p == NULL)
cout << key << " not found " << endl;
else
/* 14 occurs at position 6,7 and 8*/
cout << key << " found at position " << (p-arr) << endl;
return 0;
}
运行该程序时,可能的输出为:
14 found at position 7