• 扩大
    缩小

    计算机数据结构

    第一章 绪论

    数据结构基本概念

    数据-数据元素-数据项

    数据结构:

    1. 数据的逻辑结构
    2. 数据的存储结构
      1. 顺序
      2. 链式——结点间物理地址不连续,结点内物理地址连续
      3. 索引
      4. 散列
    3. 数据的运算

     

    算法和算法评价

     

    第二章 线性表

    1.  logN²和(logN)²都是O(N)

    2.  NlogN2 和 NlogN3 具有相同的增长速度.

    3.  N2logN和NlogN2具有不同的增长速度

    4.  与数据元素本身的形式、内容、相对位置、个数无关的是数据的( )。C

    A.存储结构
    B.存储实现
    C.逻辑结构
    D.运算实现
     
    5.  以下数据结构中,( 树)是非线性数据结构。
    A.树
    B.字符串
    C.队列
    D.栈
     
    6.

    Suppose A is an array of length N with some random numbers. What is the time complexity of the following program in the worst case?C

     
    void function( int A[], int N ) {
        int i, j = 0, cnt = 0;
        for (i = 0; i < N; ++i) {
            for (; j < N && A[j] <= A[i]; ++j);
            cnt += j - i;
        }
    }
    
     
    A.O(N2)
    B.O(NlogN)
    C.O(N)
    D.O(N1.5)
    i=0时,第二个for循环才能运行;i>0时,第二个for循环不能运行了(因为j=0定义在外面,第一遍执行 第二个for循环的时候 j=N 了已经)
     
    7.  将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构?C
    A.单链表
    B.单循环链表
    C.带尾指针的单循环链表
    D.带头结点的双循环链表
     
    8.   头指针→头节点 其指针→第一个结点

    头指针和头结点的区别:
    头指针
    头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针
    –头指针具有标识作用,所以头指针冠以链表的名字(指针变量的名字)
    --无论链表是否为空,头指针均不为空
    –头指针是链表的必要元素
    头结点
    –头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域一般无意义(但也可以用来存放链表的长度)
    –有了头结点,对在第一元素结点前插入结点和删除第一结点起操作与其它结点的操作就统一了
    头结点不一定是链表的必要元素

     
    9.  带头结点的单链表h为空的判定条件是:B
    A.h == NULL;
    B.h->next == NULL;
    C.h->next == h;
     
    10.  在双向循环链表结点p之后插入s的语句是:
           s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;
           在双向链表存储结构中,删除p所指的结点,相应语句为
           p->prior->next=p->next; p->next->prior=p->prior;
     
    11.  非空线性表具有哪些结构特征?
    A.只有唯一的开始结点和唯一的终端结点
    B.可拥有多个的开始结点和多个终端结点
    C.除开始结点外,每个结点只有一个前驱结点
    D.除终端结点外,每个结点只有一个后继结点
     

    数据结构作业4:栈和队列

    每一个出栈的元素的后面,其中比该元素先入栈的一定按照入栈逆顺序排列。
    入栈A,B,C,D,E,若第一个出栈的是D,在D之前入栈的有A、B、C,则后续ABC的出栈顺序只能为C,B,A。

    1 2 3 4 5 进栈 大的后面小的得逆序      5 4 3 2 1 进栈 小的后面大的得顺序

     

    1.  两个栈共享一片连续空间,可以将两个栈的栈底分别设在这片空间的两端。T

    2.  若已知一队列用单向链表表示,该单向链表的当前状态(含3个对象)是:1->2->3,其中x->y表示x的下一节点是y。此时,如果将对象4入队,然后队列头的对象出队,则单向链表的状态是:B

    A.1->2->3
    B.2->3->4
    C.4->1->2
    D.答案不唯一
     
    3.  循环队列的队满条件为 ( )。
    (sq.rear+1) % maxsize ==sq.front
     
    4.  有六个元素以6、5、4、3、2、1的顺序进栈,问哪个不是合法的出栈序列?B (逆序入栈
    A.2 3 4 1 5 6
    B.3 4 6 5 2 1
    C.5 4 3 6 1 2
    D.4 5 3 1 2 6
     
    5.  若采用带头、尾指针的单向链表表示一个堆栈,那么该堆栈的栈顶指针top应该如何设置?A
    A.将链表头设为top
    B.将链表尾设为top
    C.随便哪端作为top都可以
    D.链表头、尾都不适合作为top
    top→b→c→d   Push a结点   top→a→b→c→d(a->next=top->next;   top->next=a;)
     
    6.  

    下列代码的功能是返回带头结点的单链表L的逆转链表。

    List Reverse( List L )
    {
        Position Old_head, New_head, Temp;
        New_head = NULL;
        Old_head = L->Next;
    
        while ( Old_head )  {   //图解
            Temp = Old_head->Next;
        Old_head->Next = New_head;
        New_head = Old_head;
        Old_head = Temp;
      }
        L->Next = New_head;
        return L;
    }

     

          

     

    数据结构作业5:串、数组和广义表

     KMP算法,求next数组

     

    1.  假设模式串是abababaab,则KMP模式匹配算法中的next[j] = 0 1 1 2 3 4 5 6 2T

    2.   数组可以应用顺序式存储结构,也可以应用链式存储结构T

    3.   设主串 T = abaabaabcabaabc,模式串 S = abaabc,采用 KMP 算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是:B

    A.9
    B.10
    C.12
    D.15
     

    4.  设有两个串p和q,求q在p中首次出现的位置的运算称为​()。B

    A.连接
    B.模式匹配
    C.求子串
    D.求串长
     

    5.  有一个n×n的对称矩阵A,将其下三角部分按行存放在一维数组B中,而A[0][0]存放于B[0]中,则第i行的对角元素A[i][i]存放于B中的( )处。A

    A.(i+3)i/2
    B.(i+1)i/2
    C.(2n-i+1)i/2
    D.(2n-i-1)i/2
      位于(i+1)(i+2)/2 -1
     

    6.  稀疏矩阵一般的压缩存储方式有两种,即​()。C

    A.二维数组和三维数组
    B.三元组和散列
    C.三元组和十字链表
    D.替换为错散列和十字链表误项
     

    7.  设二维数组A[1… m,1… n]按行存储在数组B中,则二维数组元素A[i,j]在一维数组B[1…m*n]中的下标为 ( )。A

    A.n*(i-1)+j
    B.n*(i-1)+j-1
    C.i*(j-1)
    D.j*m+i-1
     

    8.  带行表的三元组表是稀疏矩阵的一种( ) A

    A.顺序存储结构
    B.链式存储结构
    C.索引存储结构
    D.散列存储结构
     

    9.  广义表与稀疏矩阵都是线性表的扩展,它们的共同点为()。D

    A.都可以用链接结构与顺序结构存储
    B.无共同点
    C.都是递归结构
    D.数据元素本身是一个数据结构
     
    10.  若串S=‘software’,其子串的数目是
    字串: n(n+1)/2 + 1  (1是空串
    非空子串:n(n+1)/2
    非空真子串:n(n+1)/2 - 1
     
    11.  若n为主串长度,m为模式串长度,采用BF(Brute Force)模式匹配算法,在最好情况下需要的字符比较次数为
           若n为主串长度,m为模式串长度,采用BF(Brute Force)模式匹配算法,在最坏情况下需要的字符比较次数为
     
    12.  有一个100×90的稀疏矩阵,非0元素有10,设每个整型数占2个字节,则用三元组表示该矩阵时,所需的字节数是
    将非零元素所在、非零元素的构成一个三元组(i,j,v) ;
    对于该题:
    每个非零元素占3*2=6个字节,共10个非零元素,需6*10 = 60 个字节;
    此外,还一般要用三个整数来存储矩阵的行数、列数和总元素个数,又需要3*2 = 6个字节;
    总共:60 + 6 = 66 个字节。
    typedef struct{
        int i; //行号
        int j; //列号
         elemtype d; //元素值
    }
     
    typedef struct{
        int md; //行数
        int nd; //列数
        int td; //非零元个数
    }
     
    3 * 10 * 2 + 3 * 2 = 66
     

    13.  KMP算法。

    
    #include<cstring>
    #include<iostream>
    using namespace std;
    
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    typedef int Status;
    #define MAXSTRLEN 255 
    
    void get_nextval(char T[], int nextval[])
    { 
        int i = 1, j = 0;
        nextval[1] = 0;
        while (i < T[0])
            if (j == 0 || T[i] == T[j])
            {
                ++i;
                ++j;
                if (T[i] != T[j])
                    nextval[i] = j;
                else
                    nextval[i] = nextval[j];
            } else
                j = nextval[j];
    }
    
    int Index_KMP(char S[], char T[], int pos, int next[])
    { 
        int i = pos, j = 1;
        while (i <= S[0] && j <= T[0])
            if (
    ) 
            {
                ++i;
                ++j;
            }
            else
                
    ; 
        if (j > T[0]) 
            
    ;
        else
            return 0;
    }
    
    int main()
    {
        char S[MAXSTRLEN+1],T[MAXSTRLEN+1];
        char S1[MAXSTRLEN],S2[MAXSTRLEN];
        cin >> S1 >> S2;
        strcpy(&S[1],S1);
        strcpy(&T[1],S2);    
        S[0]=strlen(S1);
        T[0]=strlen(S2);
        int *p = new int[T[0]+1];
        get_nextval(T,p);
        cout<<Index_KMP(S,T,1,p);
        return 0;
    }

     

    数据结构作业6:树和二叉树

    二叉树 

    第i层最多有2i-1(i>=1)个结点

    深度为k,最多有2k-1(k>=1)个结点

    终端结点n0,度为二的结点n2,n=n0+n1+n2  n=n1+2n2+1 则n0=n2+1

     

    1.  哈夫曼树中一定没有度为 1 的结点。T

    2.  对于一个有N个结点、K条边的森林,不能确定它共有几棵树 F

              N-K棵树

    3.  对N(2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值。T

    4.  哈夫曼编码是一种最优的前缀码。对一个给定的字符集及其字符频率,其哈夫曼编码不一定是唯一的,但是每个字符的哈夫曼码的长度一定是唯一的。F

      长度不是唯一的

     

     

    5.  某二叉树的中序序列后序序列正好相反,则该二叉树一定是 C

    A.空或只有一个结点
    B.高度等于其结点数
    C.任一结点无左孩子
    D.任一结点无右孩子
     

     

    6.  某二叉树的前序后序遍历序列正好相反,则该二叉树一定是 B

    A.空或只有一个结点
    B.高度等于其结点数
    C.任一结点无左孩子
    D.任一结点无右孩子

     

    7.  设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3, 2, 5, 1, 1}。则经过哈夫曼编码后,文本所占字节数为:C

    A.40
    B.36
    C.25
    D.12
    即求其WPL带权路径长度
     

    8.  一棵二叉树中,双分支结点数为15,单分支结点数为30,则叶子结点数为()个。B

    A.15
    B.16
    C.17
    D.47
    n0=n2+1
     

    9.  若将一棵树 T 转化为对应的二叉树 BT,则下列对 BT 的遍历中,其遍历序列与 T 的后根遍历序列相同的是:B

    A.先序遍历
    B.中序遍历
    C.后序遍历
    D.按层遍历
    森林的先根遍历对应对应二叉树的先序遍历,森林的后根遍历对应对应二叉树的中序遍历
     

    10.  以二叉链表作为二叉树的存储结构,在具有 n 个结点的二叉链表中(n>0),空链域的个数为 __A

    A.n+1
    B.n
    C.n1
    D.无法确定
     

    11.  对于任意一棵高度为 5 且有 10 个结点的二叉树,若采用顺序存储结构保存,每个结点占 1 个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元的数量至少是:A

    A.31
    B.16
    C.15
    D.10
    因为采用顺序存储,先分配存储空间,按照满二叉树的分配,要2的k次方-1个存储单元(k是层数)
     

    12.  一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶子结点个数是( )。B

    A.41
    B.82
    C.113
    D.122
    n0=3n4+2n3+n2+1
     

    13.  若某二叉树有 5 个叶结点,其权值分别为 10、12、16、21、30,则其最小的带权路径长度(WPL)是:B

    A.89
    B.200
    C.208
    D.289

     

     14.

     

     

    数据结构作业7:图

    1.  用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。F

    都有关

    2.  如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G一定有2个连通分量。T

    3.  在一个有权无向图中,若ba的最短路径距离是12,且cb之间存在一条权为2的边,则ca的最短路径距离一定不小于10。T

    4.  Kruskal 算法是维护一个森林,每一步把两棵树合并成一棵。T

     

     

    5.  Prim 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。T

     

    6.  P 是顶点 S 到 T 的最短路径,如果该图中的所有路径的权值都加 1,P 仍然是 S 到 T 的最短路径。F

     

    7.  如果从有向图 G 的每一点均能通过深度优先搜索遍历到所有其它顶点,那么该图一定不存在拓扑序列。T

     

    8.  如果 e 是有权无向图 G 唯一的一条最短边,那么边 e 一定会在该图的最小生成树上。T

     

    9.  下列关于无向连通图特征的叙述中,正确的是:只有1

    1. 所有顶点的度之和为偶数
    2. 边数大于顶点个数减1
    3. 至少有一个顶点的度为1

     

    10.  若无向图G =(V,E)中含7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是:C

    A.6
    B.15
    C.16
    D.21
    首先我想很多人一开始会疑惑为什么不能是 6 个边为最少的情况。请看下图:

     

    可以看到,同样是给出 7 点 6 边,第二种情况并不能连通,也就不符合题目中“任何情况”的要求。 

     

    由此我们可以分析到,要让 7 个点都连通,那么先让 6 个点完全连通,所谓完全就是每个点能够支出的边是满的,这样 6 个点的情况下,边和点的关系是满的。
    其边的数量由公式 n*(n-1)/2 得出(无向完全连通图),也就是 6*5/2=15;

     

    那么此时,我多了一个点,7 号点,只需要在那 6 个点的图中连一根边过来,7 号点就可以访问任意 6 点图中的点了。

     

    11.  在N个顶点的无向图中,所有顶点的度之和不会超过顶点数的多少倍?D

    A.1
    B.2
    C.(N1)/2
    D.N1
    度的和=2*边数=n*(n-1)    n个结点,所以最大n-1倍
     

    12.  图的深度优先遍历类似于二叉树的:A

    A.先序遍历
    B.中序遍历
    C.后序遍历
    D.层次遍历
     

    13.  在用邻接表表示有N个结点E条边的图时,深度优先遍历算法的时间复杂度为:B

    A.O(N)
    B.O(N+E)
    C.O(N2)
    D.O(N2×E)
     

    14.  若要检查有向图中有无回路,除了可以利用拓扑排序算法外,下列哪种算法也可以用?C

    A.Prim算法
    B.广度优先搜索
    C.深度优先搜索
    D.Dijkstra算法
     

    15.  给定一个有向图的邻接表如下图,则该图有__个强连通分量。B

    A.4 {{0, 1, 5}, {2}, {3}, {4}}
    B.3 {{2}, {4}, {0, 1, 3, 5}}
    C.1 {0, 1, 2, 3, 4, 5}
    D.1 {0, 5, 1, 3}
     

    16.  已知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图G所含的顶点个数至少是:B

    A.10
    B.11
    C.13
    D.15
    无向图边数的两倍等于各顶点度数的总和。由于其他顶点的度均小于3,可以设它们的度都为2,设它们的数量是x,可列出这样的方程4*3+3*4+2*x=16*2,解得x=4。4+3+4=11
     

    17.  下图所示的 AOE 网表示一项包含 8 个活动的工程。活动 d 的最早开始时间和最迟开始时间分别是:C

    GRE19-5.jpg

    A.3 和 7
    B.12 和 12
    C.12 和 14
    D.15 和 15
    8+4=12;  min{8+4+7+6=25, 8+10+9=27, 8+4+6+9=27}=27, 27-6-7=14;
     

    18.  图的遍历(广度优先)

    对下图进行广度优先遍历,得到的序列不可能为 ▁▁▁▁▁ 。D

    题图.jpg

    A.BCFADE
    B.DCEFBA
    C.AFEBCD
    D.CDFBAE
     
     

    数据结构作业8:查找

    二次探测法、平方探测法 H(k± i2  )

    线性探测法  重复+1

    查找成功/失败平均查找长度 的 分母意义 是不同的,失败时,分母是模的值;成功时,分母是元素个数。

    1.  在检索一个单词时,用哈希算法比用搜索树要快。T

    2.   对包含N个元素的散列表进行查找,平均查找长度为:D

    A.O(1)
    B.O(logN)
    C.O(N)
    D.不确定
     

    3.  从一个具有N个结点的单链表中查找其值等于X的结点时,在查找成功的情况下,需平均比较多少个结点?D

    A.N/2
    B.N
    C.(N1)/2
    D.(N+1)/2
    所以一共有n种情况,平均下来需要比较的节点为(1+2+3+...+(n-1)+n)/n=(n+1)/2。
     

    4.  给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10

    如果用大小为10的散列表,并且用开放定址法以及一个二次散列函数h2(X)=7(X%7)解决冲突,则输入各项经散列后在表中的下标为:B(-1表示相应的插入无法成功)

    A.1, 3, 3, 9, 4, 9, 9
    B.1, 3, 4, 9, 7, 5, -1
    C.1, 3, 4, 9, 5, 0, 8
    D.1, 3, 4, 9, 5, 0, 2
    1,3正常  h=6173%10=3(占用)  h2=7-(6173%7)=1  所以new h+=h2  第三个为4
     

    5.  现有长度为 7、初始为空的散列表HT,散列函数H(k)=k%7,用线性探测再散列法解决冲突。将关键字 22, 43, 15 依次插入到HT后,查找成功的平均查找长度是:C

    A.1.5
    B.1.6
    C.2
    D.3

     

    6.   现有长度为 11 且初始为空的散列表 HT,散列函数是 H(key)=key%7,采用线性探查(线性探测再散列)法解决冲突。

    将关键字序列 87,40,30,6,11,22,98,20 依次插入到 HT 后,HT 查找失败的平均查找长度是:C

    A.4
    B.5.25
    C.6
    D.6.29

     

    因为模是 7,所以计算的地址只可能在(0~6)这个范围(%7,再往后一定是冲突再散列的)。9+8+7+6+5+4+3 = 42

    42/7=6

     

    7.  设有一组关键字 { 29,01, 13,15,56,20,87,27,69,9,10,74 },散列函数为 H(key)=key%17,采用线性探测方法解决冲突。

    试在 0 到 18 的散列地址空间中对该关键字序列构造散列表,则成功查找的平均查找长度为 __D

    A.0.33
    B.1.17
    C.1.25
    D.1.33
    12 1 13 15 5 3 2 10 4(1 2 3重复) 9 11(与10重复) 6  一共12个
    所以为  (10+4+2)/12=1.33
     
    其失败查找长度为

     

     

    8.  下列二叉树中,可能成为折半查找判定树(不含外部结点)的是:A

    A.

    B.

    C.

    D.

     

    9.  构造的哈希函数肯定不会发生冲突。
     
    10. 假定查找有序表A[1..12]中每个元素的概率相等,则进行二分查找时的平均查找长度为
    将12个数画成完全二叉树,第一层有1个、第二次2个、第三层4个,第四层只有5个。

    二分查找时:

    第一层需要比较1次

    第二两个数,每个比较2次

    第三层四个数,每个比较3次

    第四层五个数,每个比较4次

    则平均查找长度即为:(1+2*2+3*4+4*5)/12 = 37/12

     

    数据结构作业9:排序

     

    交换类:快速排序,冒泡排序

    插入类:插入排序,希尔排序

    归并类:归并排序

    选择类:选择排序,堆排序

     

    1.  要从50个键值中找出最大的3个值,选择排序比堆排序快。T

     

    2.  排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置的方法称为:A

    A.插入排序
    B.选择排序
    C.快速排序
    D.归并排序
     

    3.  对一组包含10个元素的非递减有序序列,采用直接插入排序排成非递增序列,其可能的比较次数和移动次数分别是:D

    A.100, 100
    B.100, 54
    C.54, 63
    D.45, 44
     

    4.  采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是:C

    A.每次划分后,先处理较长的分区可以减少递归次数
    B.每次划分后,先处理较短的分区可以减少递归次数
    C.递归次数与每次划分后得到的分区处理顺序无关
    D.递归次数与初始数据的排列次序无关
     

    5.  选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是:D

    • I、数据的规模
    • II、数据的存储方式
    • III、算法的稳定性
    • IV、数据的初始状态
    A.仅 III
    B.仅 I、II
    C.仅 II、III、IV
    D.I、II、III、IV
     

    6.  快速排序方法在( )情况下最不利于发挥其长处。D

    A.要排序的数据量太大
    B.要排序的数据中含有多个相同值
    C.要排序的数据个数为奇数
    D.要排序的数据已基本有序
     

    7.  对同一待排序序列分别进行折半插入排序和直接插入排序, 两者之间可能的不同之处是____。D

    A.排序的总趟数
    B.元素的移动次数
    C.使用辅助空间的数量
    D.元素之间的比较次数
     

    8.  排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是:D

    A.5, 2, 16, 12, 28, 60, 32, 72
    B.2, 16, 5, 28, 12, 60, 32, 72
    C.2, 12, 16, 5, 28, 32, 72, 60
    D.5, 2, 12, 28, 16, 32, 72, 60
     

    选择排序

    (类似冒泡,每次扫描最小的数字 记下下标)

     

    希尔排序

    ** for(for(for(if)))**)

    public static int[]  insertionSort(int[] arr){
        if(arr == null || arr.length <= 1){
            return arr;
        }
        //希尔排序  升序
        for (int d = arr.length / 2;d>0;d /= 2){ //d:增量  7   3   1
            for (int i = d; i < arr.length; i++){ 
                //i:代表即将插入的元素角标,作为每一组比较数据的最后一个元素角标 
                //j:代表与i同一组的数组元素角标
                for (int j = i-d; j>=0; j-=d){ //在此处-d 为了避免下面数组角标越界
                    if (arr[j] > arr[j + d]) {// j+d 代表即将插入的元素所在的角标
                        //符合条件,插入元素(交换位置)
                        int temp = arr[j];
                        arr[j] = arr[j + d];
                        arr[j + d] = temp;
                    }
                }
            } 
        }
        return arr;
    }

    快速排序 

    (分而治之,类似二叉树,找一个标准,大于放其右,小于放其左)

    https://www.bilibili.com/video/BV1b7411N798?p=81&share_source=copy_web

     

    归并排序

    (反二叉树,由根到总)

     

     

     对N个记录进行归并排序,归并趟数的数量级是:  O(logN)

     

    ——————————————————————————————————————————————————————————————

    1.采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是: [C]

    A. 每次划分后,先处理较长的分区可以减少递归次数
    B. 每次划分后,先处理较短的分区可以减少递归次数

    C. 递归次数与每次划分后得到的分区处理顺序无关

    D. 递归次数与初始数据的排列次序无关

     

    2.

    要从50个键值中找出最大的3个值,选择排序比堆排序快。

     
    3.

    N个元素采用简单选择排序,比较次数和移动次数分别为:A

    A.O(N2), O(N)                               B.O(N), O(logN)
    C.O(logN), O(N2)                          D.O(NlogN), O(NlogN)
     
    4.

    数据序列{ 3, 1, 4, 11, 9, 16, 7, 28 }只能是下列哪种排序算法的两趟排序结果?D

    A.冒泡排序
    B.快速排序
    C.插入排序
    D.堆排序
     冒泡排序、堆排序 每次排序都会有一最大/小值排到最前/后面    插入排序 两趟排序会有2个排好的元素在前/后面
     
    5.

    排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是:D

    A.5, 2, 16, 12, 28, 60, 32, 72
    B.2, 16, 5, 28, 12, 60, 32, 72
    C.2, 12, 16, 5, 28, 32, 72, 60
    D.5, 2, 12, 28, 16, 32, 72, 60
     
    6.

    N个记录进行归并排序,归并趟数的数量级是:A

    A.O(logN)
    B.O(N)
    C.O(NlogN)
    D.O(N2)
     

    posted on 2022-06-26 17:27  Ancientea  阅读(1113)  评论(0)    收藏  举报

    导航