当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ bsearch()用法及代码示例


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

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

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

bsearch()原型

void* bsearch (const void* key, const void* base, size_t num, size_t size, int (*compare)(const void*,const void*));

该函数在<cstdlib> 头文件中定义。

bsearch() 函数在数组 base 中搜索 key 。小于 key 的所有元素必须出现在数组 base 的前面。同样,所有大于 key 的元素都必须出现在 base 中。

为了执行搜索,bsearch() 函数对compare 指向的函数进行一系列调用,其中key 作为第一个参数,数组中的一个元素作为第二个参数。

参数:

  • key:指向要搜索的元素的指针
  • base : 指向数组第一个元素的指针
  • num : 数组中的元素数
  • size:数组中每个元素的大小(以字节为单位)
  • compare:指向比较两个元素的函数的指针。它返回
    • 如果第一个参数小于第二个参数,则为负整数
    • 如果第一个参数大于第二个参数,则为正整数
    • 如果两个参数相等则为零

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

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

返回:

bsearch() 函数返回:

  • 指向找到的元素的指针。如果找到多个匹配元素,则未指定函数将返回哪个元素的地址作为结果。
  • 如果未找到元素,则为空指针。

示例 1:bsearch() 函数如何工作?

#include <iostream>
#include <cstdlib>
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 <iostream>
#include <cstdlib>
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

相关用法


注:本文由纯净天空筛选整理自 C++ bsearch()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。