从无序到有序
我们可以看到在无需向量的算法中,所需要的算法时间复杂度都不是特别理想,因此我们引入了排序算法,将无需向量整理成为有序向量。本节中,你将体验到“秩序”的力量,并见证一个非常高效,厉害的算法。
有序的好处
如果你的士兵按照一定的顺序排列好,你对他们进行点名、布置小队任务什么的,当然会比乱排的要方便,对向量中的元素也是如此,当它们按照从小到大的顺序排列好,你会发现很多算法都要方便不少。
有序性甄别
前面我们提到,无需向量和有序向量的操作接口是不一样的,所以在确定要使用什么接口之前,我们要对向量进行一个甄别,判断他们是不是已经有序。
该算法与气泡排序算法原理相同:
template<typename T>
int Vector1<T>::disordered() const
{
int n;
for (int i = 1; i < _size; i++)
{
if (_elem[i-1]>_elem[i])
{
n++;
}
}
return n;
}
唯一化
向量操作算法中,最令我震撼和佩服的一个。
在有序向量中,我们可能会遇到值相等的元素相邻地进行排列,我们会想要将这些重复的元素删除,然而在有序向量中,把这些重复元素删除将比在无需向量中容易。
对于无需向量中的唯一化算法我将不再赘述,我们直接来看更为高效的这一种:
这幅图片很直观地展示出了我们将要采取的策略——很粗暴很直接:直接忽略那些重复的元素,把和当前元素互异的元素直接拿到当前元素的