您的位置:首页 > 其它

C 标准库 bsearch 函数的实现

2015-12-06 15:38 330 查看
/*
* 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: