数据结构与算法(二)向量结构

数组:起始于地址A、物理位置连续的一段存储空间。A[ ]。A[ i]=A+i x s.int *p=A +3,则可以认为P[0]=A[3]。

向量的构造:向量的ADT接口,向量的模板类。

向量里面内置了元素类型为T的私有数组,由new申请而成。向量的构造:默认构造,基于复制的构造。

向量的析构:释放用于存放元素的内部数组。向量的动态空间管理:要求向量的实际规模与内部数组容量的比值也称装填因子,不超过一,也不接近于0。可扩充策略:若未满时不扩容,否则加倍,并复制原内容到新数组,释放原来的。在插入时均会调入该算法。在删除操作远多余插入操作,则会减小装填因子。所以,需要在每次删除操作后,进行缩容算法,保证装填因子大于25%。在对单次操作的执行速度及其敏感的应用场合以上策略并不适用。

随机向量的生成:置乱器,自后向前,将V[i-1]与V[0,i]中的某一元素进行交换。

向量的唯一化处理:o(n*n),若假如向量是有序的,再进行唯一化,可用o(n)的时间。依次用while循环找到不同元素,将其移植到紧邻于前者右侧。发现在唯一化时,向量的大小变了,但是后面的还是有元素存在。若果经过缩容,则不存在。

向量的查找:无序查找,有序查找,二分查找算法。

向量的排序:排序算法的总结,分类:内部排序(内存足够容纳),外部排序(借助外部存储,内存只能容纳一小部分数据。)

离线算法和在线算法,前一情况,待排序的数据以批处理形式整体给出;后一情况,待排序的数据需要实时生成。根据所依赖的体系结构不同有串行和并行两大排序算法。还有根据排序算法是否采用随机策略,来分确定式和随机式之分。

CBA式算法,即比较树算法。

稳定性:考察算法对重复元素的处理。即重复元素的相对次序在排序前后保持一致。

冒泡排序:自左向右,逐一检查各对相邻元素,若逆序,则交换局部有序。稳定算法。

归并排序:两个有序向量,各取出其首元素作比较,小的取出追加至输出向量末尾,该元素的后继成为新的首元素。只需载入两个向量的首元素。主体结构是典型的分治策略。先分治再合并。关键是合并程序。如何写?

merge(Rank lo,Rank mi,Rank hi,T *){
    T* A =elem+lo;
    int lb = mi -lo; T*B =new T[lb];
    for (Rank i =0;i<lb;B[i]=A[i++]);
    int lc = hi-mi;T*c=elem+mi;
    for(Rank i =0,j=0,k=0;(j<lb)||(k<lc);){
        if(j<lb && (!(k<lc) || (B(j)<=c(k))) A[i++]=B[j++];
        if(k<lc && (!(j<lb) || (B(j)<=c(k))) A[i++]=B[j++];
}
delete [] B;
}

时间复杂度:o(nlogn)。稳定算法。

猜你喜欢

转载自blog.csdn.net/u013070875/article/details/85038002