首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

2分查找的 C++ 实现

2012-11-10 
二分查找的 C++ 实现只是作为 stdlib 中的 bsearch 的一个拓展吧,看看声明:void *bsearch(const void*key,

二分查找的 C++ 实现

只是作为 stdlib 中的 bsearch 的一个拓展吧,看看声明:

void *bsearch(const void*key, const void *base, size_t nelem, size_t width, int(*fcmp)(const void *,const *));

参数:

第一个:要查找的关键字。

第二个:要查找的数组。

第三个:指定数组中元素的数目。

第四个:每个元素的长度(以字符为单位)。

第五个:指向比较函数的指针。

 

其实,有时候在fcmp 中仅仅凭两个参数判断是不够的,如果能增加拓展性,可以传入辅助判断变量的话,会更好。

 

下面是我的实现与测试代码:

 

template<class T1, class T2> //使用模板int BinarySearch(const T1* theArray, //需要查找的数组  int length, //数组元素个数 const T2& key, //需要查找的 key ,类型可以不必与数组相同 int (*compare)(const T1&, const T2&, void* param), //比较函数的函数指针 void *param) //附加比较参数,将被传入 compare 中辅助判断

后面基本就是简单的递归二分查找了,需要注意的是,当 length == 1 时,应该作为递归出口,即使找不到也不能再递归了,不然就死循环了

因为 mid = length / 2   == 1 / 2 == 0; 后面的递归就会出问题了

热点排行