下面是二进制搜索功能.
int search(int a[], int v, int left, int right)
{
while (right >= left)
{
int m = (left + right)/2;
if (v == a[m])
return m;
if (v < a[m])
right = m - 1;
else left = m + 1;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
如何确定此函数的Big-O表示法?
这个搜索函数是否为O(n),因为while循环依赖于left的值?
Jon*_*eet 10
在每一步中,值的范围(粗略地)减半 - 如果你开始right - left == 100,那么在第二步它将是49,然后是24,然后是11等.
假设n = right - left,复杂度为O(log n).(这取决于左右两侧的值.)