有序向量

本文探讨了有序向量的概念及其优势,包括如何通过排序提高操作效率。文章介绍了有序向量的唯一化、插入元素、查找元素的方法,并重点讨论了二分查找的优化,如Fibonacci查找和版本C的改进,以降低平均查找长度并提高性能。
摘要由CSDN通过智能技术生成

代码来源:《数据结构(c++语言版)(第三版)》,邓俊辉编著,ISBN: 978-7-302-33064-6

有序向量中的元素不仅按线性次序排放,而且数值大小也按次序单调分布。这给后续的操作带来很大的便利。虽然对向量排序sort()会花费一定的时间,但是从总体上看,转化成有序向量后,操作会简化很多。这一时间的花费是值得的。

1.有序性甄别

向量有序的比较原理是:对向量中任意两个相邻元素进行比较,如果其未按要求排列,则称其为逆序对。如果向量中没有类似的逆序对,则向量有序。

template <typename T> int Vector<T>::disordered() const {   //返回向量中逆序相邻元素对的总数
    int n = 0;  //计数器
    for (int i = 1; i < _size; ++i)     //逐一检查_size - 1对相邻元素
        if(_elem[i-1] > _elem[i]) ++n;  //逆序则计数
    return n;   //向量有序当且仅当n = 0
}

2.唯一化

为了实现唯一化,最容易想到的方法就是从第一项元素开始,逐个扫描后继元素,若相同则删除后继元素。

template <typename T> int Vector<T>::uniquify(){    //有序向量重复元素剔除算法(低效版)
    int oldSize = _size; int i = 1; //当前比对元素的秩,起始于首元素
    while (i < _size)   //从前向后,逐一比对各对相邻元素
        _elem[i - 1] == _elem[i] ? remove(i) : ++i; //若雷同,则删除后者;否则,转至后一元素
    return oldSize - _size; //向量规模变化量,即被删除的元素总数
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值