我在分析这种方法的大 O 复杂性时遇到问题。事实上,由于其令人困惑的性质,我也不确定该方法是如何工作的。现在,我所知道的是,将在数组中的“逐渐缩小的范围”中搜索给定的数字。有人可以解释以下代码并指导我如何分析其复杂性吗?
static int foo(int a[], int u, int l, int x) {
while(l <= u) {
int s = (u-l+1)/3, f = l+s, b = f+s;
if(a[f] == x)
return f;
else if(a[b] == x)
return b;
else if(a[f] > x)
u = f-1;
else if(a[b] > x)
l = b+1;
else {
l = b-1;
u = f+1;
}
}
return -1;
}