1、第 1 章 概论练习题一、单项选择题1在数据结构中,从逻辑上可以把数据结构分为(B )A紧凑结构和非紧凑结构 B线性结构和非线性结构C内部结构和外部结构 D动态结构和静态结构2若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为(D)A顺序存储结构 B链式存储结构C索引存储结构 D散列存储结构3算法分析的两个主要方面是(B )A正确性和简明性 B时间复杂性和空间复杂性C可读性和可维护性 D数据复杂性和程序复杂性4线性表采用链式存储结构时,要求内存中可用存储单元地址(A)A不一定连续的 B部分地址必须是连续的C必须是连续的 D一定是不连续的5算法指的是(C)A计算机程序 B解决问题
2、的计算方法C解决问题的有限运算序列 D排序算法二、填空题6数据结构一般包括逻辑结构 、存储结构和数据运算三个方面的内容7数据的逻辑结构可分为线性结构 、非线性结构两大类8数据的存储结构(物理结构)一般可以用顺序存储结构 、链式存储结构、索引存储结构及散列存储结构等四种存储方法表示9在选用求解一个问题的算法时,除了首先考虑算法是“正确的”之外,还主要考虑执行算法所需要的时间、执行算法所需要的存储空间及算法应易于理解、易于编程、易于调试等三点。10设有一批数据元素,为了最快地存取某元素,宜用顺序 结构存储,为了方便的插入一个元素,宜用链式结构存储三、应用题设 n 为正整数,利用大“O”记号,写出下
3、列各程序段的时间复杂度11 for (i = 1; i = (s + 1) * (s + 1)s = s + 1;分析:语句 “s = s + 1;”执行 次,故该程序段的时间复杂度为O( )n n13 x = 1;sum = 0;for (i = 0; i next = headC head next = NULL Dhead = NULL4在单循环链表中,p 指向表任一结点,判断表不是访问结束的条件是(B )Ap != NULL Bp != head Cp next != head Dp next != NULL5在一个单链表中,已知 q 指向 p 所指向结点的前趋结点,若在 p、q 所指
4、结点之间插入一个 s 所指向的新结点,则执行的操作是(A)Aq next = s; s next = p Bp next = s; s next = q C s next = p next; p next = s Dp next = s next; s next = p6在一个单链表中,若删除 p 指向结点的后继结点,则执行的操作是(A)Aq = p next; p next = p next next; free(q);Bp = p next; q = p next; p = q next; free(q);C q = p next next; p = p next; free(q);Dp
5、= p next next; q = p next; free(q);二、填空题7在一个长度为 n 的顺序表中删除第 i 个元素,需要向前移动 n i 个元素8在顺序表中插入或删除一个元素,需要平均移动表长的一半 个元素,具体移动的元素个数与插入或删除的位置有关9顺序表中逻辑上相邻的元素在物理存储位置上一定相邻,链表结构中逻辑上相邻的元素在物理位置上不一定相邻10已知顺序表中一个元素的存储位置是 x,每个元素占 c 个字节,求其后继元素位置计算公式为 x c,而已知单链表中某一结点由 p 指向,求此后继结点存储地址的操作为 p next11在用 p 指针访问单链表时,判断不是访问结束的条件是
6、p ! NULL;在访问单循环链表时,判断不是访问表结束的条件是 p ! head12已知 p 指向双向链表的中间某个结点,从给定的操作语句中选择合适的填空(1 )在 p 结点后插入 s 结点的语句序列是 I、G 、A、D(2 )在 p 结点前插入 s 结点的语句序列是 C、N、H 、B(3 )删除 p 结点的直接后继结点的语句序列是 J、Q、E、M(4 )删除 p 结点的直接前趋结点的语句序列是 K、P、F、M (5 )删除 p 结点的语句序列是 O、R、LAp next s Bp prior s Cs next pDs prior p Ep next p next next Fp prio
7、r p prior priorGp next prior s Hp prior next s Is next p nextJq p next Kq p prior Lfree(p)M free(q) Ns prior p prior Op prior next p nextPp prior prior next p Qp next next prior p Rp next prior p prior13下面是一个在带头结点的单链表 head 中删除所有数据域值为 x 的结点的算法,但不完善,请在相应的地方填上适当的语句,使之成为完整的算法void DeleX(LinkList head, Da
8、taType x)LinkNode *p, *q, *s;P head;q p next;while (q != NULL)if (q data x)s q;q q next;free(s);p next q;elsep q;q q next;三、算法设计题14设有两个顺序表 A 和 B,且都递增有序。试写一算法,从 A 中删除与 B 中相同的那些元素(即计算 A B) SeqList Subtraction(SeqList A, SeqList B)int i, j, k 0;/令匹配位置为 0for (i 0; i next;if (q ! NULL)/判断所指结点是否是最后一个结点if
9、(p head)/判断所指结点是否是头结点head head next;/头结点指针域所指结点变成新的头结点s head next;/记录第 2 个结点head next p;/新的头结点指针域指向原头结点p next s;/原头结点变成第 1 个结点后指针域指向第 2 个结点else r head;while (r next ! p)r r next;/查找 p 指向结点直接前趋r next q;/p 指向结点直接前趋指针域指向 p 指向结点直接后继p next q next;/p 指向结点指针域指向 p 指向结点直接后继的直接后继q next p;/p 指向结点直接后继指针域指向 pels
10、e printf(“p 指向的结点无后继节点!”)16已知两条单链表 A 和 B 分别表示两个集合,其元素值递增有序。试写一算法,求 A 和 B 的交集C,要求 C 同样以元素值递增的单链表形式存储LinkList Intersection(LinkList A, LinkList B)LinkNode *p, *q, *r, *s;LinkList C (LinkNode *) malloc(SizeOf(LinkNode);r C; p A; s B;while (p ! null else if (p data q data) q q next;else s (LinkNode *) m
11、alloc(SizeOf(LinkNode);s data p data; s next NULL; r next s;r s; p p next; q q next;17设有一个带头结点的双向循环链表,head 为链表的头指针。试写一算法,实现在值为 x 的结点之前插入一个值为 y 的结点void Insert(DlinkList head, DataType x, DataType y)DlistNode *p, *s;s (DlistNode *) malloc(SizeOf(DlistNode);s data y;p head next;while (p ! head /查找结点值为
12、x 的结点if (p head)printf(“没有值为 x 的结点!”);elses next p;s prior p prior;p prior next s;p prior s;第 3 章 栈和队列练习题一、单项选择题1栈的操作原则是(C)A顺序进出 B后进后出 C后进先出 D先进先出2进栈序列为 a,b ,c ,则通过入出栈操作可能得到的 a,b,c 的不同排列个数为(B )A4 B5 C6 D73按字母 a, b,c ,d,e 顺序入栈,则出栈的输出序列不可能是(B )Adecba Bdceab Cabcde Dedcba4判断一个顺序栈 st(最多元素为 StackSize)为栈满
13、的条件表达式是(D)Ast.top ! StackSize Bst.top ! 0 Cst.top ! 1 Dst.top StackSize 15在向顺序栈中压入元素时(C)A先存入元素,后移动栈顶指针 B谁先谁后无关紧要C先移动栈顶指针,后压入元素 D同时进行6一个队列的入队序列是 1,3,5 ,7,9,则出队的输出序列只能是(B )A9 ,7 ,5,3,1 B1,3 , 5,7,9C 1,5,9,3,7 D9 ,5,1,7,37判断一个顺序队列 sq(最多元素为 QueueSize)为空队列的条件表达式为(A)Asq.rear sq.front Bsq.rear 0C sq.front
14、QueueSize Dsq.rear QueueSize 18判断一个循环队列 cq(最多元素为 QueueSize)为满队列的条件表达式为(C)Acq.rear cq.front Bcq.rear QueueSizeC (cq.rear 1) % QueueSize cq.front Dcq.rear % QueueSize 1 cq.front二、填空题9假设以 S 和 X 分别表示进栈和退栈操作,则对输入序列 a,b,c,d,e 进行一系列栈操作SSXSXSSXXX 之后,得到的输出序列为 b、c 、e、d 、a10假设 S.datamaxsize为一个顺序存储的栈,变量 top 指示栈
15、顶元素的位置。能做进栈操作的条件是 S.top 0)S2.datatop2 x;else S1.datatop2 x;DataType Delete(SeqStack *S1, SeqStack *S2)if (top1 top2) printf(“Queue Empty”);if (top1 rear = 0;for (int i = 0; i rear = i;if (i = k) Q rear = Q rear % k;Q dataQ rear = Fibonacci(i);第 4 章 多维数组和广义表练习题一、单项选择题1对矩阵的压缩存储是为了(B )A方便运算 B节省空间 C方便存储
16、 D提高运算速度2二维数组 M 的元素是 4 个字符(字符占一个存储单元)组成的串,行下标 i 的范围是 07,列下标j 的范围是 09,则存放 M 需要存储单元数为(D)A360 B480 C240 D3203 N 是一个 58 的二维数组,当 N 按行优先方式存储时,表示该数组的第 10 个元素的是(C)AN 22 BN21 CN11 DN 12 4二维数组 Mij的元素是 4 个字符(字符占一个存储单元)组成的串,行下标 i 的范围是 04,列下标 j 的范围是 05,M 按行存储时元素 M35的起始地址与 M 按列存储时起始地址相同的是(B )AM24 BM34 CM35 DM44 5
17、稀疏矩阵一般的压缩存储方法有两种,即(D)A二维数组和三维数组 B三元组和散列C顺序表和十字链表 D三元组和十字链表6设矩阵 A 是一个对称矩阵,为了节省存储空间,将其下三角部分按行序存放在一位数组中,对任一下三角部分元素 ,在一维数组 的下标位置 k 的值是(1)/2Sn()ijaSA(B)A B*()/1ji*(1)/2ijC D2 二、填空题7将三角矩阵 的下三角部分逐行地存储在起始地址为 1000 的内存单元中,已知每个元素占8A4 个单元,则 的地址为 1208648已知数组 表示对称矩阵,其中每个元素占 5 个单元,现将其下三角部分按行优先次序存10储在起始地址为 1000 的连续
18、存储单元中,则 对应的地址为 12254A9广义表(a) ,a )的表头是(a) ,表尾是 a10广义表(a ) )的表头是 (a) ,表尾是( ) 11广义表(a ) ) )的表头是 (a) ) ,表尾是( ) 12取出广义表 A (x , y,z) , (a,b ,c ,d) )中原子 b 的函数是 head(tail(head (tail(A ) ) ) )13取出广义表 A (x , (a,b ,c ,d) ) )中原子 c 的函数是head(tail(tail (head(tail(head(A) ) ) ) ) ) 14 A (x, (a,b) ,c, d) ) ,函数(head(
19、head (tail(A) ) )的运算结果是(a,b) 三、解答题15已知二维数组 按“行优先顺序”存储在内存中,假设每个元素占 d 个存储单元,第一个元素mn的存储地址表示为 LOC(A00),写出计算数组 A 的任一个元素 LOC(A ij)的存储地址公式LOC(A ij)的存储地址公式为 LOC(A ij) = LOC(A00) + d * (n * i + j)16已知二维数组 A510按“行优先顺序”存储在内存中,假设每个元素占 3 个存储单元,第一个元素的存储地址 LOC(A00) 1000,计算出 LOC(A34)的值LOC(A34)的值为 LOC(A34) = LOC(A00
20、) + d * (n * i + j) = 1000 + 3(310 + 4) = 110217已知有一个 10 阶对称矩阵 A,采用压缩存储方式存储(以行序为主,每个元素占 1 个单元) ,其起始地址为 1100,写出 的地址5A45的地址为 1100 + d * (j * (j + 1) / 2 + i) = 1100 + 1 (5 (5 + 1) / 2 + 4) = 111918求下列各广义表的表头和表尾:(1 ) (a ,b ) ,c ,d)(2 ) (a,b ,c)(3 ) (a ,b ,c ) )(4 ) (a, (b ,c ) ,d)(5 ) (a ,b ) , (c , (d
21、, ( ) ) ) )令题中广义表皆为 A,则有:head( A)(a,b) ,tail (A )(c ,d)head( A) a,tail(A )(b,c)head( A)(a,b,c) ,tail(A)( )head( A) a,tail(A )(b,c) ,d)head( A)(a,b) ,tail (A )(c , (d, ( ) ) ) )19求下列广义表的长度和深度:(1 ) (a ) , ( b) ,c ) , ( d) ) ) )(2 ) (a, (a,b) ,d,e, (i,j) ,k ) )(3 ) (a ,b ) , (c , (d,e ) ) )令题中广义表皆为 A,则
22、有:length(A) 3,depth(A)4length(A) 5,depth(A) 3length(A) 2,depth(A)320写出下列稀疏矩阵对应的三元组表:015234三元表如下:i j v0 2 11 1 51 3 22 1 33 0 43 2 2第 5 章 树和二叉树练习题一、单项选择题1将一棵有 100 个结点的完全二叉树从根开始,每一层从左到右依次对结点进行编号,根节点的编号为 1,则编号为 49 的结点的左孩子编号为(B )A99 B98 C50 D482设深度为 k 的二叉树上只有度为 0 和度为 2 的结点,则此类二叉树所包含的结点数至少为(C)A B C D121k
23、1k2k3已知某二叉树的后序遍历序列是 dabec,中序遍历序列是 debac,则它的前序遍历序列是(B )Aacbed Bcedba Cdeabc Ddecab4若某二叉树的前序遍历序列是 abdgcefh,中序遍历序列是 dgbaechf,则它的后序遍历序列是(D)Abdgcefha Bgdbecfha Cbdgaechf Dgdbehfca5如果某二叉树的前序遍历序列是 stuwv,中序遍历序列是 uwtvs,则它的后序遍历序列是(C)Auwvts Bvwuts Cwuvts Dwutsv6按照二叉树的定义,具有 3 个结点的二叉树有(A)A5 种 B4 种 C3 种 D6 种7深度为
24、4 的二叉树至多可以有的结点数为(D)A17 B13 C18 D158一棵二叉树如图 5.31 所示,其后序遍历序列为(C)Aabdgcefh Bbgdaechf Cgdbehfca Dabcdefgh9以二叉链表作为二叉树的存储结构,在具有 n 个结点的二叉链表中( n 0) ,空链域的个数为(B )A B C D21n1n12110一棵左子树为空的二叉树在前序线索化后,其空指针域数为(C)A0 B1 C2 D不确定 二、填空题11由二叉树的前序遍历和中序遍历或中序遍历和后序遍历 可以唯一确定一棵二叉树12已知二叉树的前序遍历序列为 ABDCEFG,中序遍历序列为 DBCAFEG,则后序遍历
25、序列为DCBFGEA13深度为 k 的完全二叉树至多有 个结点,至少有 个结点21k12k14在任意一棵二叉树中,若度数为 0 的结点个数为 ,度数为 2 的结点个数为 ,则 等0n2n0于 21nab cd e fg h图 5.3115一棵二叉树的第 i( )层最多有 个结点112i三、解答题16对如图 5.32 所示的树,画出其孩子兄弟链表存储结构孩子兄弟链表如下图所示:17对如图 5.33 所示的二叉树,分别写出其前序、中序、后序遍历序列前序遍历序列:abdehcfgi,中序遍历序列:dbheafcig后序遍历序列:dhebfigca18已知一棵二叉树的中序遍历序列为 cbafehgd,
26、后序遍历序列为cbfhgeda,画出此二叉树由后序遍历序列可知该二叉树根节点为 a,进而由中序遍历序列知 a 的左孩子为b,b 的左孩子为 c,没有右孩子,由中序遍历序列和后序遍历序列的规则继续类推可得 a 的右孩子为 d,d 的左孩子为 e,没有右孩子,e 的左孩子为 f,右孩子为 g,g 的左孩子为 h,没有右孩子得二叉树如右图所示:19画出如图 5.34 所示二叉链表树的中序线索二叉树易知中序遍历序列为 CHBAFEGD,故中序线索二叉树如下图所示:AB DC EF G20用分别以 8,11,13,5,17,25,21 作为权值的叶结点,构造一棵哈夫曼树,并求该二叉树的带权路径长度 WP
27、L哈夫曼树如图所示:易得带权路径长度()4(137)(215)267WPL21假设用于通信的电文仅由 8 种字母a、 b、c 、d 、e 、f 、g、h 组成,字母在电文中出现的频率分别为0.10、0.07、0.16、0.05、0.19 、0.23、0.12、0.08试为这 8 个字母设计哈夫曼编码构造哈夫曼树如图所示:a 的编码为 1101,b 的编码为 0011,c 的编码为 111,d 的编码为 0010,e 的编码为 01,f 的编码为 10,g 的编码为 000,h 的编码为 1100ab cd e f gi图 5.33hAB CD E F G H图 5.32A BDC E F G
28、H ab dc ef ghAB D C EF G H 图 5.345 813 11 13241721304525551005 7128 101812 1624 3419431002357四、算法设计题22以二叉链表作为存储结构,试利用指针数组实现编写非递归的前序遍历二叉树的算法void Preorder(BinTree bt)BinNode *sn; top 1;do while (bt ! null) printf(“%c”,bt data); /访问根结点和子树根结点top top + 1;stop bt; /存父结点指针bt bt lchild; /访问左子树if (top ! 1) b
29、t stop; /取父结点指针top top 1;bt bt rchild; /访问右子树 while (top !1 23以二叉链表作为存储结构,其根结点指针为 bt,试写从根开始按层遍历二叉树的算法typedef struct int hp, tp;BinTNode *dtmaxlen;lqueue;void Layar(BinTree bt)lqueue lq;if (bt != null)lq.hp = 0; lq.rp = 0; lq.dt1 = bt;do lq.hp = (lq.hp % maxlen) + 1;bt = lq.dtlq.hp;printf(“%6d”,bt da
30、ta);if (bt - lchild != null) lq.rp = (lq.rp % maxlen) + 1; lq.dtrp = bt.lchild;if (bt - rchild != null) lq.rp = (lq.rp % maxlen) + 1; lq.dtrp = bt.rchild; while (lq.hp != lq.rp);printf(“n”);24以中序线索二叉链表为存储结构,试写查找某结点*p 的中序前趋结点的算法BinThrNode *InorderPred(BinThrNode *p)BinThrNode *q;if (p ltag 1) /若 p 左子
31、树为空return p lchild; /返回左线索所指的中序前趋else q p lchild; /左子树非空,从 p 的左子树开始查找while (q ltag 0)q q rchild; /右子树非空,延右链查找return p; 第 6 章 图练习题一、单项选择题1在一个具有 n 个顶点的无向图中,要连通全部顶点至少需要多少条边(C) A B C D1n1n/2n2无向图的邻接矩阵是一个(B )A对角矩阵 B对称矩阵 C上三角矩阵 D零矩阵3采用邻接表存储的图的深度优先遍历算法类似于二叉树的(B )A按层遍历 B前序遍历 C中序遍历 D中序遍历4采用邻接表存储的图的宽度优先便利算法类似
32、于二叉树的(A)A按层遍历 B前序遍历 C中序遍历 D中序遍历5设无向连通图 G 中顶点数为 n,则图 G 中最少有多少条边(B )A B C D(1)n11n2n6若图 G 为 n 个顶点的有向图,则图 G 中最多有多少条边(A)A B C D(1)1n(1)n(1)/2nv1v2v3v5v412 3456图 6.27 一个有向图7在一个图 G 中所有顶点度数之和等于边数的(D)A3 倍 B 倍 C4 倍 D2 倍128在具有 n 个顶点的无向完全图 G 中边的总数为(B )A B C D1(1)/n(1)n1n9在具有 6 个顶点的无向图 G 中至少应有多少条边才能确保是一个连通图(D)A
33、8 B7 C6 D510一个具有 n 个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是(C)A B C D11n2n2(1)n二、填空题11邻接表是图的链式存储结构12一个无向连通图的生成树是含有该连通图的全部顶点的极小连通子图13一个带权的无相连通图的最小生成树有一棵或多棵14 n 个顶点的连通图最多有 条边(1)/2n15设图 G 有 n 个顶点和 e 条边,进行深度优先搜索的时间复杂度至多为 ,进行广度优先搜()One索的时间复杂度至多为 ()O16在无向图 G 的邻接矩阵 A 中,若 Ai,j等于 1,则 Aj,i等于 117已知图 G 的邻接表如图 6.25 所示,其从顶点 v1
34、 出发的深度优先搜索序列为 ,13452vv、其从顶点 v1 出发的广度优先搜索序列为 13245v、18已知一个有向图 G 的邻接矩阵表示,计算第 i 个结点的入度的方法是计算第 i 列非零元素的个数 19图的生成树不是唯一的,一个连通图的生成树是一个 极小连通子图,n 个顶点的生成树有 n 1 条边20对于一个具有 n 个顶点和 e 条边的无向图,若采用邻接表表示,则表头向量的大小为 n,所有邻接表中的结点总数是 2e三、应用题21已知一个图的邻接矩阵为 ,假设顶点是 v0,v 1,画出对应的图01对应的图如下图所示:22对于如图 6.27 所示的有向图,试给出:V1V2V3V4V5342
35、25 4 4 图 6.25 一个图的邻接表(1 )图的邻接矩阵;(2 )邻接表和逆邻接表;(3 )强联通分量图的邻接矩阵为 ,邻接表、逆邻接表、强联通分量如下图所示:010123按顺序输入顶点对(边):(1,4 ) , (2,3) , (3 ,5) , (4 ,5) , (1,3 ) , (3,4) , (1,2 ) ,采用尾插法画出邻接表;若从顶点 V3 出发,分别写出按深度优先搜索遍历和按广度优先搜索遍历的顶点序列邻接表如图所示:按深度优先搜索遍历的顶点序列为:V3、V4 、 V5、V1 、V2,按广度优先搜索遍历的定点序列为V3、V4 、 V1、V5 、V224已知一个如图 6.28 所
36、示的带权网络图,使用普里姆算法构造该图的最小生成树构造最小生成树的过程图如下所示:V1V2V3V4V5442154 3 V6 2 5 6 1V1V2V3V4V522 255 5 6 V6 36 1312 3456V1V2V3V4V5244313 4 3 5 2 3 5 1 12345 6图 6.29 一个带权图12386567 51 23 45 6图 6.28 一个带权图2234456751 23456图 6.30 一个有向图13(a)213 4(b)2 31 23 4(c)2 341 23 45(d)22341 23 45 6(e)2234425已知一个如图 6.29 所示的带权网络图,使用
37、克鲁斯卡尔算法构造该图的最小生成树构造最小生成树的过程图如下所示:26设有一个有向图 G 如图 6.30 所示写出图 G 的两个拓扑排序序列排序顺序如图所示,故拓扑排序序列为:1、2、3 、6、5、4;1 、3、2、6 、5、4 第 7 章 排序练习题一、单项选择题1在下列排序方法中,时间复杂度不受数据初始状态影响,恒为 的是2()On(C)A堆排序 B冒泡排序 C直接选择排序 D快速排序2在待排序的记录关键字序列基本有序的前提下,效率最高的排序方法是(B )A直接选择排序 B直接插入排序 C快速排序 D归并排序3在下列排序方法中,记录关键字比较的次数与记录的初始排列次序无关的方法是512(a
38、)1 123412(b)1234(c)123123451235(d)12345 61235 5(d)23456(a)2 456(b)456(c)45(d) 4(e)23456(a)3456(b)456(c)45(d) 4(e)(D)A直接插入排序 B冒泡排序 C希尔排序 D直接选择排序4在下列排序方法中,从待排序序列中依次取出记录关键字与已排序序列(初始时为空)中的记录关键字进行比较,将其放入已排序序列的正确位置上的方法,称为(C)A直接选择排序 B冒泡排序 C直接插入排序 D希尔排序5在下列排序方法中,从待排序序列中挑选记录(关键字值大的或小的) ,并将其一次放入已排序序列(初始时为空)的一
39、端的方法,称为(B )A希尔排序 B直接选择排序 C插入排序 D归并排序6在下面的几种排序方法中,需求内存空间最大的方法是(A)A归并排序 B直接选择排序 C快速排序 D插入排序7在下列排序方法中,平均查找长度最小的排序方法是(D)A归并排序 B直接插入排序 C直接选择排序 D快速排序8有一组记录的关键字序列为(46,79,56,38,40 ,84) ,利用快速排序的方法,以第一个记录为基准得到的一趟排序结果为(A)A40 、38 、46 、56、79、84 B40、38、46、84 、56、79C 38、40、46、56 、79、84 D40、38 、46、79、56 、849有一组记录的关
40、键字序列,经过一次归并后为25 4816 3579 8223 4036 72,按归并排序的方法对该序列再进行一趟归并排序后的结果为(C)A16 、25 、48 、35、79、82、23、36 、40、72B16、25、35、48 、79、82、23、36 、40、72C 16、25、35、48 、23、40、79、82 、36、72D16、25、35、48 、79、23、36、40、72、8210已知一组记录的关键字序列为(46,79 ,56,38,40,84 ) ,则利用堆排序的方法建立的初始堆(大根堆)是(A)A84 、79 、56 、38、40、46 B79、46、56、38 、40、8
41、4C 84、79、56、46 、38、40 D84、56 、79、40、46 、3811若一组记录的关键字序列为(46,79 ,56,38,40,84 ) ,则;利用箱排序排序方法,按每个关键字个位数依次装箱后得到的结果为(C)A38 、40 、46 、56、79、84 B40、38、46、79 、56、84C 40、84、46、56 、38、79 D40、38 、46、84、56 、7912用快速排序方法对包含 n 个记录的文件进行排序,最坏情况下执行的时间复杂度为(D)A B C D()On2(log)O2(log)On2()On二、填空题13在选择排序、堆排序、快速排序和直接插入排序方法
42、中,稳定的排序方法是直接插入排序14分别采用堆排序、快速排序、直接插入排序和归并排序方法对初始状态为基本递增有序的序列,按递增顺序排序,最省时间的排序方法是直接插入排序,最费时间的是归并排序15在直接插入排序、希尔排序、直接选择排序、快速排序、堆排序、归并排序和基数排序中,不稳定的排序有直接选择排序、希尔排序、快速排序、堆排序,平均比较次数最少的排序是快速排序,需要内存空间最多的是基数排序16在对一组关键字序列为(51,38 ,96,23,45,15,72,62 ,87)的记录进行直接插入排序时,当把第 5 个记录(关键字值 45)插入到有序表时,为寻找插入位置需要比较 3 次17对 n 个记
43、录的排序文件进行起泡排序时,最少的比较次数是 次1n18 在所有的排序算法中,若记录关键字基本正序(升序)或反序(降序) ,则选用堆排序;若记录按关键字无序,则最好选用快速排序19在所有的排序算法中,若记录关键字基本正需(升序) ,则选用直接插入排序;若初始记录关键字基本反序(降序) ,则选用堆排序20在快速排序、归并排序和堆排序等几种排序算法中,若仅从存储空间考虑,它们的优先顺序是堆排序、快速排序、归并排序21对 n 个记录采用直接选择排序方法所执行的记录交换次数最多为 次1n22对 n 个记录进行堆排序,最坏情况下的执行时间为 2(log)O三、解答题23对于给定的一组关键字(46,32
44、,55,81,65,11,25,43 ) ,进行直接插入排序,写出其排序的每一趟结果直接插入排序的每一趟结果为:第一趟:32,46,55,81,65 , 11,25,43第二趟:32,46,55,81,65 , 11,25,43第三趟:32,46,55,81,65 , 11,25,43第四趟:32,46,55,65,81, 11,25,43第五趟:11,32,46,55,65,81,25 ,43第六趟:11,25,32,46,55,65,81,43第七趟:11,25,32,43,46,55,65,8124对于给定的一组关键字(26,18 ,60,14,7,45,13 ,32) ,进行直接选择排
45、序,写出其排序的每一趟结果直接选择排序的每一趟结果为:第一趟:7,18,60,14,26,45,13,32第二趟:7,13,60,14,26,45,18,32第三趟:7,13,14,60,26,45,18,32第四趟:7,13,14,18,26,45,60,32第五趟:7,13,14,18,26,45,60,32第六趟:7,13,14,18,26,32,60,45第七趟:7,13,14,18,26,32,45,60最后得到排序结果:7,13,14,18,26,32,45,6025对于给定的一组关键字(41,62 ,13,84,35,96,57,39 ,79,61,15 ,83) ,分别写出执行以下各排序算法的每一趟排序结果(1 )希尔排序(5,2 ,1) ;(2)快速排序;(3)基数排序希尔排序的每一趟结果为:d 5:15,57,13,79,35 ,41, 62,39 ,84,61,96,83d 2:13,39,15,41,35 ,57, 62,61 ,84,79,96,83d 1:13,15,35,39,41 ,57, 61,62 ,79,83,84,96快速排序的每一趟结果为