展示一个通用的二分法检索程序:
#include <Binary_search.h>
int Binary_EQUAL(void *key,void *data,int data_count,int (*compare)(void *key,void *data,int n))
{
int l,m,ret;
if(!key||!data) return -1;
l=0;
data_count--;
while(data_count>=l) {
m=l+((data_count-l)>>1);
if(!(ret=compare(key,data,m))) return m;
if(ret>0) data_count=m-1;
else l=m+1;
}
return -1;
}
参数:
key,不知道啥类型,放到比较器用。
data,一个排序数组,不知道类型。
data_count,数组中元素个数。
compare,比较器,一个回调函数,你提供。返回值:比key大返回>0,比key小返回<0,相等返回0。
返回值:
找到返回下标值,-1没找到。
【 在 ylh1969 的大作中提到: 】
: c还可以做另一种泛型:运行时泛型。
: 比如做通用的二叉树,通用排序,二分法检索,可以处理任意类型。
: 实现了程序与数据独立,但是没有实现算法与数据结构独立。
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*