课程笔记 04 :数据结构(清华) 向量-查找算法

先看无序向量的查找操作:

Rank vector<T>::find(T const & e, Rank lo, Rank hi) //在区间[lo, hi)中寻找值为e且秩为最大者

{

while ((lo < hi--) && (e != _elem[hi])); //逆向寻找秩最大者

return hi; //当hi < lo时意味着查找失败

}

我们看到,对于无序向量,由于元素间的大小关系不确定,所以要想查找符合要求的元素,不论如何都必须将整个向量进行一次遍历,直到找到目标元素为止,这就意味着无序向量的查找操作的复杂度为O(n)。而在处理有序向量时,由于已知元素间的大小关系,所以当我们对向量中的某一个元素做出判断后,就可以确定目标元素是在该元素之前或是之后抑或就是该元素自身,因而不必大费周章的往两端判断,只需取其一端即可。这样一来,整体的算法复杂度就变为了O(logn),相比于无序向量的查找算法,已经有了很大的改进。

现在,我们针对有序向量的特点,采用二分查找策略,其实现如下:

Rank vector<T>::binsearch(T const & e, Rank lo, Rank hi) //在区间[lo, hi)中寻找值为e的元素

{

while (lo < hi)

{

Rank mi = (lo + hi) / 2; //取区间[lo, hi)的中点

if (e &l

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值