Chinaunix首页 | 论坛 | 博客
  • 博客访问: 279124
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-03 10:05
文章分类

全部博文(138)

文章存档

2016年(1)

2015年(137)

我的朋友

分类: C/C++

2015-06-26 20:58:36

int Find(int * A,int left,int right, int key)
{
int center;
if(left<=right)
{
center=left+(right-left)>>1;// //防止溢出,移位也更高效。同时,每次循环都需要更新。
if(A[center]<=key)
Find(A,center+1,right,key);
else if(A[center]>key)
Find(A,left,center,key);
else
return center;//可能会有读者认为刚开始时就要判断相等,但毕竟数组中不相等的情况更多   //如果每次循环都判断一下是否相等,将耗费时间

}
else
return -1;
}
int binary_find(int * A,int N,int key)
{
int left=0;
int right=N-1;
int center;
while(left<=right)
{
center=left+(right-left)>>2;
if(A[center]<=key)
left=center+1;
else if(A[center]>key)
right=center;
else
return center;
}
return -1;
}
int find(int * A,int N,int key)
{
return Find(A,0,N-1,key)
阅读(805) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~