C语言bsearch函数
时间: 2024-12-28 21:30:43 浏览: 12
`bsearch()` 是 C 标准库中的一个函数,它在已经排序的数组中搜索指定的元素。该函数主要用于二分查找法,即通过比较中间元素与目标值来逐步缩小查找范围。它的原型通常如下所示:
```c
void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*));
```
参数说明:
- `key`:待查找的目标值的指针。
- `base`:已排序数组的首地址。
- `nmemb`:数组中的元素个数。
- `size`:每个数组元素的大小。
- `compar`:一个指向比较函数的指针,用于比较数组中的元素和目标值。
`compar` 函数需要接受两个参数,通常是一个指向数组元素的指针和一个指向目标值的指针,并返回一个整数值。如果第一个参数应该排在第二个之前,则返回负数;相等则返回零;第一个参数应在第二个之后则返回正数。
例如,假设我们有一个整数数组按升序排列,我们可以这样使用 `bsearch()`:
```c
#include <stdlib.h>
#include <stdio.h>
// 假设我们要比较的结构体
typedef struct {
int value;
} MyStruct;
// 比较函数
int compare(const void* a, const void* b) {
return (*(MyStruct*)a - *(MyStruct*)b);
}
int main() {
MyStruct array[] = {1, 4, 6, 8, 10};
size_t n = sizeof(array) / sizeof(array[0]);
int target = 8;
MyStruct* found = bsearch(&target, array, n, sizeof(MyStruct), compare);
if (found) {
printf("Found %d at index %zu\n", found->value, (size_t)(found - array));
} else {
printf("Element not found.\n");
}
return 0;
}
阅读全文