模仿C库函数二分查找的通用类型

sumos 2011-11-16 01:23:01
记得这是我去腾讯面试的题目,当时我第一反应是用C++模板,但是面试官说用纯C实现,支持任意类型的查找。
实际上,这道题的本质是 函数指针 的应用。
//Dev C++
#include <cstdlib>
#include <iostream>
using namespace std;

int half(void *src,int len,void *d,int size,int (*equal)(void*,void*))
//src源数组 len数组长度 d待查找数 size数组中数据类型大小 equal函数指针
{
int low=0,high=len-1,mid,r;
while(low<=high)
{
mid=(high+low)/2;
r=equal((char*)src+mid*size,d); //必须强制转换类型
if(r==0)
break;
else if(r>0)
high=mid-1;
else
low=mid+1;
}
if(r==0)
return mid;
else
return -1;
}

int comp(void *a,void *b)
{
int ia=*(int*)a;
int ib=*(int*)b;
int r=ia-ib;
return r;
}
//采用int做测试
int main(int argc, char *argv[])
{
int a[]={0,1,2,3,4,5,6,7,8,9};
int len=sizeof(a)/sizeof(int);
int k,d=3;
k=half(a,len,&d,sizeof(int),comp);
cout<<k<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
...全文
103 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧