您的位置:首页 > 其它

有序数组的查找(个人感觉美到极致的一个算法)

2016-07-16 19:54 369 查看
对于包含n个元素的数组,整个查找过程大约要经过logn次比较。(二分查找算法)

代码如下:

非递归版本

int BinarySearch(int array[],int n,int value)
{
int left = 0;
int right = n-1;
//如果上面这句是int right = n的话,则下面有两处需要改动
//while(left < right)
//array[middle]>value的时候 right = mid(基本没有这样写的)
while (left <= right)
{
int mid = left + ((right-left)>>1);//位运算更快
if (array[mid] > value)
{
right = mid-1;
}
else if (array[mid] < value)
{
left = mid+1;
}
else
return mid;//返回的是位置
}
return -1;
}


递归版本

int BinarySearch(int array[],int left,int right,int value)
{

if (left > right)
{
return -1;
}
int mid = left + ((right-left)>>1);
if (array[mid] > value)
{
return BinarySearch(array,left,mid-1,value);
}
else if (array[mid] < value)
{
return BinarySearch(array,mid+1,right,value);
}
else
return mid;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: