对于包含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;
}