二分查找平均时间复杂度O(logn)
自己写个例子以供后面查找。
1,递归方法:
int binary_search_recursion(int *array,int start,int end,int target)
{
if(end<start)
{
return -1;
}
int q = (start + end)/2 ;
if(array[q] == target)
{
return q;
}
else if (array[q] > target)
{
return binary_search(array,start,q - 1,target);
}
else
{
return binary_search(array,q + 1,end,target);
}
}
2,while
int binary_search_while(int *array,int len,int target)
{
int start = 0;
int end = len-1;
while(end>=start)
{
int q = (start + end)/2 ;
if(array[q] == target)
{
return q;
}
else if (array[q] > target)
{
end = q -1;
}
else
{
start = q+1;
}
}
return -1;
}
重点:
计算q的时候使用的是(start+end)/2;
再第二次进行计算的时候,q应该+1或者-1,因为第一轮已经比较过该q,需要挪动q的值,再是不挪动q的值也会造成死循环。
另,也有其它计算q的办法,但是需要跟下面的循环保持统一。不要少一次多一次计算。