二分查找

840阅读 0评论2015-06-26 seuqyr
分类:C/C++

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)
上一篇:容器适配器--stack,queue,priority_queue
下一篇:参数压栈顺序