📜  C++ bsearch()

📅  最后修改于: 2020-09-25 08:47:56             🧑  作者: Mango

C++中的bsearch() 函数对元素数组中的元素执行二进制搜索,如果找到,则返回指向该元素的指针。

bsearch() 函数要求所有小于要在数组中左侧搜索的元素的元素。

同样,所有大于要搜索元素的元素都必须位于数组中它的右侧。如果数组以升序排序,则可以满足此要求。

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() 函数使得一系列调用由指向的函数的comparekey作为第一个参数,并从所述阵列的第二个参数的元素。

bsearch()参数

key作为第一个参数传递,数组中的元素作为第二个参数传递。比较函数的原型如下所示:

int compare(const void* a, const void* b);

bsearch()返回值

bsearch() 函数返回:

示例1: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

示例2: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] = {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