回顾查找问题(参见练习 2.1-3),注意到,如果序列A已排好序,就可以将该序列的中点与v进行比较。根据比较的结果,原序列中有一半就可以不用做进一步的考虑了。二分查找算法重复这个过程,每次都将序列剩余部分的规模减半。为二分查找写出迭代或递归的伪代码。证明:二分查找的最坏情况运行时间为θ(lgn)。
伪代码如下
考虑最坏运行时间,当v并不存在于数组A中时,运行时间是最坏的,因为二分查找必须运行到最后才知道结果。
设A的长度为n,由于每次执行二分查找,查找范围都会缩减一半。假定问题规模为2的幂,那么问题将被简化。这时运行时间将可以表述为:
当n=1时,有T(n) = C
T(n) = T(n/2) + D
其中D为执行分解步骤中间的常量时间开销。
由于假定了n为2的幂,分解层数必然为,由于分解的每一层执行的时间都为常量时间,取所有层中最大的那个常量时间为K,则T(n)的执行时间为
。
由此可知该算法的最坏运行时间为θ(lgn) 。