从二分查找开始
上一篇博客《从零开始的数据结构之向量》具体实现了基于有序向量的二分查找,即如下代码段:
1
2
3
4
5
6
7
8
9
10
11
12
13 template <typename T>
Rank vector<T>::search(T const & e,Rank lo,Rank hi) //二分查找
{
int mi;
while(lo<hi) //将递归改为迭代
{
mi=(lo+hi)>>1;
if(e<_elem[mi]) hi=mi;
else if(e>_elem[mi]) lo=mi+1;
else return mi;
}
return -1; //查找失败
}
在以上查找中,所花费的时间主要分为两类:元素的大小比较、秩的算术运算及其赋值。
查找长度
我们规定在一次查找中,所经历的大小比较次数为其查找长度。为了估计出一般情形下的成功查找长度,不失一般性地在等概率条件下考察长度为
当
接下来用递推分析法。对于长度为