二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。
二分查找的时间复杂度取决于查找过程中分区数可能的最大值。对于一个有n个元素的数据集来说,最多可以进行lg n次分区。对于二分查找,这表示最终可能在最坏的情况下执行的检查的次数:例如,在没有找到目标时。所以二分查找的时间复杂度为O(lg n)。
二分查找算法实例 (假定c是A的最后一元)
function b-search(c)
{ L:=1; U:=n; //2a
found:=false; //a
while not found and U>=L do //2t (logn+2)多一次比较
{ i:=(L+U)div2; //(a+s+d)(logn+1)
if c=A[i] //t (logn+1)
then found:=true //a
else if c>A[i] //t (logn+1)
then L:=i+1 //(s+a)(logn+1)
else U:=i-1}
if found
then b-search:=i
else b-search:=0 } //a
分析:问题规模为n, 设赋值a,比较t, 加法s, 除法d, 减法b.
最坏情况: Tmax(n) = 6a+4t+2s+d+(2a+2s+4t+d) logn