您好,下面是我的二进制搜索实现的伪代码:
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]。
K > A[m]
K < A[m]
因为在每一步中,数组都被切成两部分,每个部分的大小为(n-1)/2,所以我们有最多的log_2(n-1)步骤。
(n-1)/2
log_2(n-1)
这导致了总共的2*log_2(n-1)比较,渐进地确实等于O(log(n))。
2*log_2(n-1)
O(log(n))