需要帮助使用Big-O表示法计算此算法的时间复杂度。干杯。
int binarySearch(int[] array, int key) {
int lo = 0, mid, hi = array.length-1;
while (lo <= hi) {
mid = (lo + hi)/2;
if (key < array[mid])
hi = mid - 1;
else if (array[mid] < key)
lo = mid + 1;
else return mid; // success
}
return -1; // failure
}
答案 0 :(得分:1)
如果你将数组中的元素数加倍,那么预期的步数就会增加1.因此,它是O(log(N)); log是base 2。
答案 1 :(得分:0)
如果找不到搜索内容,则每次搜索范围变小两倍。例如,64 - &gt; 32 - &gt;等等。也就是说,你需要最多迭代lb(n)。因此,运行时间为O(lb(n)),其中lb(n)是n的基数2的对数。