我试图用平方来做二进制搜索的修改版本。我已经完成了代码,它完美无缺。这里我使用2的平方来找到键变得小于arr [mid]的位置。当这变为真时,我从旧的mid(存储在lo中)到当前的mid中线性平方以搜索键。
我知道第一部分是O(logN),因为我使用正方形找到mid,但我不确定整个算法是否是OlogN),有人可以帮忙解决这个问题。线性扫描显然不是O(N),因为它在最坏的情况下仅覆盖介于2 ^ k到2 ^ k + 1之间的范围。 我如何计算其大O复杂度。
以下是代码:
public int search(int key, int arr[]) {
int lo = 0, mid = 1;
while (mid < arr.length) {
if (key < arr[mid]) {
break;
} else if (key > arr[mid]) {
lo = mid + 1;
} else if (key == arr[mid]) {
return mid;
}
mid *= 2;
}
while (lo < arr.length && lo < mid) {
if (key == arr[lo])
return lo;
lo++;
}
return -1;
}
如果我使用斐波那契数字,逻辑是否正确?由于没有平方成分。