对hielsnoppe 的回答的一个非常小的修正:
在n-element 数组 ( n > 0) 中,要比较的元素位于 index 处m = floor((n-1)/2)。所以有三种可能
A[m] < K,然后在一次比较之后,在n-1-m = ceiling((n-1)/2)-element 数组中继续搜索。
A[m] > K,然后在两次比较之后,在m-element 数组中继续搜索。
A[m] == K,那么我们经过两次比较就完成了。
n因此,如果我们用 表示在-element 数组中搜索的最大(最坏情况)比较次数C(n),我们有
C(0) = 0
C(n) = max { 1 + C(ceiling((n-1)/2), 2 + C(floor((n-1)/2) }, n > 0
对于奇数n = 2k+1,地板和天花板是相同的,所以最大值显然是后者,
C(2k+1) = 2 + C(k)
甚至n = 2k,我们发现
C(2k) = max { 1 + C(k), 2 + C(k-1) }.
因为n = 2, 解决了C(2) = 1 + C(1) = 1 + 2 = 3, 对于所有更大的偶数n, 最大值是2 + C(k-1), 因为n >= 1我们有C(n) <= C(n+1) <= C(n) + 1.
评估前几个的递归n,我们发现
C(0) = 0
C(1) = 2
C(2) = 3
C(3) = C(4) = 4
C(5) = C(6) = 5
C(7) = C(8) = C(9) = C(10) = 6
C(11) = ... = C(14) = 7
C(15) = ... = C(22) = 8
C(23) = ... = C(30) = 9
所以通过归纳我们证明
C(n) = 2k, if 2^k <= n+1 < 2k + 2^(k-1), and
C(n) = 2k+1, if 2^k + 2^(k-1) <= n+1 < 2^(k+1)
或者
C(n) = 2*log2(n+1) + floor(2*(n+1)/(3*2^floor(log2(n+1)))).
这是一个确切的上限。