📅  最后修改于: 2023-12-03 15:14:02.845000             🧑  作者: Mango
在C++语言中,有许多标准库函数可用来帮助程序员实现一些常用算法。其中一个函数是std::bsearch
,该函数用于在已排序的数组中搜索特定元素。
void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
其中,
key
:指向要搜索的元素的指针。base
:指向要搜索的数组的起始指针。num
:搜索的数组元素的数量。size
:每个元素的大小(以字节为单位)。compar
:用于比较两个元素的函数指针。std::bsearch
函数实现了一个二分查找算法,将指定的key
与排序的数组中的元素进行比较。 如果查找成功,则返回指向该元素的指针;如果未找到,则返回NULL
指针。
下面是一个简单的示例,展示了如何使用std::bsearch
函数来查找一个整数是否存在于一个已排序的整数数组中。
#include <iostream>
#include <cstdlib>
#include <cstring>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {2, 5, 7, 9, 11, 13, 15};
int key = 5;
int* item = (int*) std::bsearch(&key, arr, 7, sizeof(int), compare);
if(item != NULL) {
std::cout << "Element found: " << *item << std::endl;
} else {
std::cout << "Element not found" << std::endl;
}
return 0;
}
在此示例中,我们声明了一个名为arr
的整数数组,并指定了要查找的键key
。然后,我们创建了一个指向int
型的指针item
来接收返回值。compare
函数用于比较bsearch
所查找的元素和数组中的每个元素。 在调用bsearch
函数时,我们将key
传递给key
参数,arr
传递给base
参数,7(数组元素数量)传递给num
参数,sizeof(int)
传递给size
参数,compare
函数的地址传递给compar
参数。 如果函数成功找到元素,则会将指向找到元素的指针赋值给item
;否则,该指针将保持为NULL
。 最后,我们根据在item
中返回的值输出结果。
std::sort
、std::qsort
等排序算法进行排序的。std::bsearch
函数是一个非常有用的标准库函数,用于在已排序的数组中搜索特定元素。 通过将搜索算法封装在函数中,程序员不必自己实现二分查找算法,从而节省了时间和代码量。 但是,程序员需要注意一些注意事项,并确保使用合适的搜索算法和正确的比较函数。