1.给定区间的二分查找

template<typename T>
int Vector<T>::search(T const & e, int lo, int hi) const
{
    Rank mid = (hi - lo) >> 1;
    if (e < _elem[mid])
        serach(T const & e, int lo, int mid);
else if (_elem[mid] < e) serach(T const & e, int mid+1, int hi);
else return mid; return -1; }

1.1.优化代码(或者说增加代码可理解性)的一点

这里我们用的两个判断语句分支都用的是小于号,可以理解为,当 e < _elem[mid] , 关键码在序列的左边,反之,在右边。

1.2.复杂度

最差的情况为n/2不断的递减,也可以理解为log n 不断的减少一层找到最后的关键码(类似于树的深度)。

复杂度是  O(log n )

posted @ 2019-06-21 22:02  Royzzzzz  阅读(176)  评论(0编辑  收藏  举报