/*
* bsearch 二分查找算法
* 此函数主要是针对连续的空间已经排序好的序列,查找某个特定的关键字
* 此序列最好不要有重复的值
*
*/
#include <cstdio>
void* bsearch (const void* key, const void* base,
size_t num, size_t size,
int (*compar)(const void*,const void*)) {
size_t low = 0;
size_t high = num-1;
size_t mid;
while (low <= high) {
mid = (low + high) >> 1;
if (compar(key, (char *)base + mid * size) == 0) {
break;
}
else if (compar(key, (char *)base + mid * size) < 0) {
high = mid-1;
}
else {
low = mid+1;
}
}
if (low <= high) {
return (char *)base + mid * size;
}
return nullptr;
}
int compare_int(const void *elem1, const void *elem2) {
return *(int *)elem1 - *(int *)elem2;
}
int main() {
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int key = 8;
int *p = (int *)bsearch(&key, a, 10, sizeof(int), compare_int);
if (p != nullptr) {
printf("find key in a: %d\n", *p);
}
else {
printf("error");
}
return 0;
}
C 标准库 bsearch 函数的实现
最新推荐文章于 2023-03-06 21:09:48 发布