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; }
相关文章推荐
- LDA(线性判别分析,Python实现)
- hdu1561 树形dp + 背包
- 关于空间域图像增强中的模板算子理解
- ViewPager+Fragment取消预加载(延迟加载)
- Ubuntu的防火墙及SElinux
- 单例模式java代码
- JS-拖拽效果
- selenium python (九)对话框处理
- node.js模块、包
- C语言成长学习题(七)
- LightOJ 1214 - Large Division 【同余定理】
- 素数求和问题
- Educational Codeforces Round 2
- Educational Codeforces Round 2
- 知识点积累
- MySQL学习笔记(三)
- iOS开发——界面跳转与返回及视图类型详解
- HDU5593 ZYB's Tree(树形dp)
- 有向图(5)--一般化的有向图&&拓扑排序
- activity_main.xml不能预览问题