使用这种算法,在最坏的情况下二进制搜索会进行多少次比较?

您好,下面是我的二进制搜索实现的伪代码:

Input: (A[0...n-1], K)

begin

l ← 0; r ← n-1

while l ≤ r do

m ← floor((l+r)/2)

if K > A[m] then l ← m+1

else if K < A[m] then r ← m-1 else return m

end if

end while

return -1 // key not found

end

我只是想知道如何计算此实现在大小为n的排序数组的最坏情况下进行的比较次数?

比较次数是否等于lg n + 1?还是不同的?

回答:

在这种情况下,最坏的情况是,如果元素K在A中不存在并且小于A中的所有元素。那么在每个步骤中我们有两个比较:K > A[m]K < A[m]

因为在每一步中,数组都被切成两部分,每个部分的大小为(n-1)/2,所以我们有最多的log_2(n-1)步骤。

这导致了总共的2*log_2(n-1)比较,渐进地确实等于O(log(n))

以上是 使用这种算法,在最坏的情况下二进制搜索会进行多少次比较? 的全部内容, 来源链接: utcz.com/qa/404756.html

回到顶部