[考研类试卷]排序模拟试卷1及答案与解析.doc

上传人:fatcommittee260 文档编号:848568 上传时间:2019-02-22 格式:DOC 页数:19 大小:99KB
下载 相关 举报
[考研类试卷]排序模拟试卷1及答案与解析.doc_第1页
第1页 / 共19页
[考研类试卷]排序模拟试卷1及答案与解析.doc_第2页
第2页 / 共19页
[考研类试卷]排序模拟试卷1及答案与解析.doc_第3页
第3页 / 共19页
[考研类试卷]排序模拟试卷1及答案与解析.doc_第4页
第4页 / 共19页
[考研类试卷]排序模拟试卷1及答案与解析.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、排序模拟试卷 1 及答案与解析一、单项选择题1 下面给出的 4 种排序方法中,( )排序法是不稳定性排序法。(A)插入(B)冒泡(C)二路归并(D)堆2 下列内部排序算法中,其比较次数(交换次数)与序列初态无关的算法是( )。(A)快速排序(B)直接插入排序(C)二路归并排序(D)冒泡排序3 下列内部排序算法中在初始序列已基本有序(除去 n 个元素中的某 k 个元素后即呈有序,kn)的情况下,排序效率最高的算法是( )。(A)冒泡排序(B)堆排序(C)直接插入排序(D)二路归并排序4 下面给出的 4 种排序方法中,排序过程中的比较次数与排序方法无关的是( )。(A)选择排序(B)插入排序(C)

2、快速排序(D)堆排序5 在下列排序算法中,算法的时间复杂度与初始数据无关的是( )。(A)直接插入排序(B)冒泡排序(C)快速排序(D)直接选择排序6 下列排序算法中,( )排序在一趟结束后不一定能选出一个元素放在其最终位置上。(A)选择(B)冒泡(C)归并(D)堆7 下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是( )。(A)直接插入排序(B)快速排序(C)直接选择排序(D)堆排序8 9如果只想得到 1 000 个元素组成的序列中第 5 个最小元素之前的部分排序的序列,用( ) 方法最快。(A)冒泡排序(B)快速排序(C)简单选择排序(D)堆排

3、序9 在文件“局部有序 ”或文件长度较小的情况下,最佳内部排序的方法是( )。(A)直接插入排序(B)冒泡排序(C)简单选择排序(D)堆排序10 从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为( )排序法。(A)插入(B)选择(C)希尔(D)二路归并11 若用冒泡排序方法对序列10,14,26,29,41,52 从大到小排序,需进行( )次比较。(A)3(B) 10(C) 15(D)2512 采用简单选择排序,比较次数与移动次数分别为( )。(A)D(n), D(log2n)(B) D(log2n),O(nn)(C) O(nn)

4、,O(n)(D)D(nlog 2n),O(n)13 就排序算法所用的辅助空间而言,堆排序、快速排序、归并排序的关系是( )。(A)堆排序快速排序归并排序(B)堆排序归并排序快速排序(C)堆排序归并排序快速排序(D)堆排序快速排序归并排序14 将两个各有个元素的有序表归并成一个有序表,其最少的比较次数是( )。(A)N(B) 2N 一 1(C) 2N(D)N 一 115 已知待排序的 n 个元素可分为 nk 个组,每个组包含 k 个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为( )。(A)O(nlog 2n)(B) O(nlo

5、g2k)(C) O(klog2n)(D)O(klog 2k)16 以下序列不是堆的是( )。(A)(100 ,85,98,77,80,60,82,40,20,10,66)(B) (100,98,85,82,80,77,66,60,40,20,10)(C) (10,20,40,60,66,77,80,82,85,98,100)(D)(100 ,85,40,77,80,60,66,98,82,10,20)17 归并排序中,归并的趟数是( )。(A)O(n)(B) O(log2n)(C) O(nlog2n)(D)D(nn)18 有一组数据(15,9,7,8,20,一 1,7,4),用堆排序的筛选方法

6、建立的初始堆为( )。(A)一 1,4,8,9,20,7,15,7(B)一 1,7,15,7,4,8,20,9(C)一 1,4,7,8,20,15,7,9(D)A、B、C 均不对。19 基于比较方法的 n 个数据的内部排序,最坏情况下的时间复杂度能达到的最好下界是( )。(A)O(nlog 2n)(B) O(log2n)(C) O(n)(D)O(nn)二、综合题20 在执行某种排序算法的过程中出现了排序码朝着最终排序序列相反的方向移动,从而认为该排序算法是不稳定的,这种说法对吗?为什么?21 设有 5 个互不相同的元素 a,b,C,d,e,能否通过 7 次比较就将其排好序?如果能,请列出其比较

7、过程;如果不能,则说明原因。22 对一个由 n 个关键字不同的记录构成的序列,能否用比 2n 一 3 少的次数选出该序列中关键字取最大值和关键字取最小值的记录?请说明如何实现? 在最坏的情况下至少进行多少次比较?23 利用比较的方法进行排序,在最坏的情况下,能达到的最好时间复杂性是什么?请给出详细证明。24 设 LS 是一个线性表,LS=(a 1,a 2,a n),若采用顺序存储结构,则在等概率的前提下,插入一个元素需要平均移动的元素个数是多少?若元素插在 ai 与 ai+1 之间(0in1)的概率为(ni)(n(n+1)2),则插入一个元素需要平均移动的元素个数又是多少?24 对于 n 个元

8、素组成的线性表进行快速排序时,所需进行的比较次数与这 n 个元素的初始排序有关。问:25 当 n=7 时,在最好情况下需进行多少次比较? 请说明理由。26 当 n=7 时,给出一个最好情况的初始排序的实例。27 当 n=7 时,在最坏情况下需进行多少次比较? 请说明理由。28 当 n=7 时,给出一个最坏情况的初始排序的实例。29 关于堆的一些问题:(1)堆的存储表示是顺序的,还是链接的?(2)设有一个最小堆,即堆中任意结点的关键字均大于它的左孩子和右孩子的关键字。其具有最大值的元素可能在什么地方?(3)对 n 个元素进行初始建堆的过程中,最多做多少次数据比较(不用大 O 表示法)?30 若有

9、 N 个元素已构成一个小根堆,那么如果增加一个元素为 Kn+1,请用文字简要说明如何在 log2n 的时间内将其重新调整为一个堆。31 冒泡排序方法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。32 有一种简单的排序算法,叫做计数排序(Countsorting)。这种排序算法对一个待排序的表(用数组表示) 进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键字比该记录的关键字小,假设针对某一个记录,统计出的计数值为

10、c,那么,这个记录在新的有序表中的合适的存放位置即为 c。设计实现计数排序的算法;对于有 n 个记录的表,关键字比较次数是多少?简单选择排序相比较,这种方法是否更好?为什么?33 某个待排序的序列是一个可变长度的字符串序列,这些字符串一个接一个地存储于唯一的字符数组中。请改写快速排序算法,对这个字符串序列进行排序。34 设有一个数组中存放了一个无序的关键序列 K1,K 2,K n。现要求将 Kn 放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过 n。35 已知关键字序列(K 1,K 2,K 3,K n-1)是大根堆。试写出一算法将(K1,K 2,K 3,K n-

11、1,K n)调整为大根堆;并利用调整算法写一个建大根堆的算法。36 一个最小最大堆(min max Heap)是一种特定的堆,其最小层和最大层交替出现,根总是处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆。(1)画出在图中插入关键字为 5 的结点后的最小最大堆。(2)画出在图中插入关键字为 80 的结点后的最小最大堆。(3)编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。37 输入 N 个只含一位数字的整数,试用基数排序的方法,对这 N 个数排序。排序模拟试卷 1 答案与解析一、单项选择题1 【

12、正确答案】 D【试题解析】 此题考查的知识点是排序算法的稳定性问题。如果待排序的文件中,存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,则称这种排序是稳定的排序;反之,若具有相同关键字的记录之间的相对次序发生变化,则称这种排序是不稳定的排序。是否稳定与算法有关,相邻数据比较的算法是稳定的,不相邻数据比较,会出现不稳定。选项 A、B 、C 都是相邻元素比较,是稳定的。所以选 D。【知识模块】 排序2 【正确答案】 C【试题解析】 此题考查的知识点是各类排序算法的思想。冒泡排序方法就是自底向上检查这个序列,若两个相邻的元素的顺序不对,则交换。直到所有元素处理完为

13、止。与序列初态有关,D 错。直接插入排序思想是假设待排序的记录存放在数组 Rn+1中,排序过程中的某一时刻,R 被分成两个子区间R1,Ri 一 1和Ri,Rn,其中,前一个子区间是已排好序的有序区;后一个子区间是当前未排序的无序区。直接插入排序的基本操作是将当前无序区的第 1 个记录 Ri插入到有序区中的适当位置,使得 R1到 Ri变为新的有序区。首先比较 Ri和 Ri 一 1,如果 Ri 一 1Ri,则R1 i已排好序,第 i 遍处理就结束了;否则交换 Ri与 Ri1的位置,继续比较 Ri 一 1和 Ri 一 2,直到找到某一个位置_(1ji 一 1),使得 RjRj+1时为止。与序列初态有

14、关,B 错。快速排序是通过基准元素 v 把表(文件,数据集合)划分成左、右两部分,使得左边的各记录的关键字都小于 v;右边的各记录的关键字都大于等于 v;重复该过程直到排好序。与序列初态有关,A 错。二路归并是首先把每个记录看成是一个有序序列,共 n 个,将它们两两合并成n2个分类序列,每个序列长度为 2(当 n 为奇数时,最后一个序列长度为 1);对n2个分类序列,再两两归并在一起;如此进行,直到归并成一个长度为 n 的分类序列为止。与序列初态无关,所以选 C。【知识模块】 排序3 【正确答案】 C【试题解析】 此题考查的知识点是各类排序算法的效率。起泡排序比较 n(n1)2 次,没有交换次

15、数;堆排序一次比较 log2n,共需要 n 次;直插比较 n 一 1 次,没有交换;二路归并排序一次比较 log2n,共需要 n 次。综上,应选 C。【知识模块】 排序4 【正确答案】 A【知识模块】 排序5 【正确答案】 D【知识模块】 排序6 【正确答案】 C【知识模块】 排序7 【正确答案】 B【知识模块】 排序8 【正确答案】 D【知识模块】 排序9 【正确答案】 A【知识模块】 排序10 【正确答案】 A【知识模块】 排序11 【正确答案】 C【知识模块】 排序12 【正确答案】 C【知识模块】 排序13 【正确答案】 A【知识模块】 排序14 【正确答案】 A【知识模块】 排序15

16、 【正确答案】 B【知识模块】 排序16 【正确答案】 D【知识模块】 排序17 【正确答案】 B【知识模块】 排序18 【正确答案】 C【知识模块】 排序19 【正确答案】 A【知识模块】 排序二、综合题20 【正确答案】 这种说法不对。因为排序的不稳定性是指两个关键字值相同的元素的相对次序在排序前、后发生了变化,而题中叙述和排序中稳定性的定义无关,所以此说法不对。对 4,3,2,1 起泡排序就可否定本题结论。【知识模块】 排序21 【正确答案】 可以做到。取 a 与 b 进行比较,C 与 d 进行比较。设ab,Cd(ab 和 Cd 情况类似) ,此时需 2 次比较,取 b 和 d 比较,若

17、 bd,则有序 ab d;若 bd 时则有序 Cdb,此时已进行了 3 次比较。再把另外两个元素按折半插入排序方法,插入到上述某个序列中共需 4 次比较,从而共需 7次比较。【知识模块】 排序22 【正确答案】 将 n 个元素对称比较,即第一个元素与最后一个元素比较,第二个元素与倒数第二个元素比较比较中的小者放前半部,大者放后半部,用了n2 次比较。再在前后两部分中分别简单选择最小和最大元素,各用(n2)一 1 次比较。总共用了(3n2) 一 2 次比较。显然,当 n3 时,(2n 一 3)(3n2)一 2。 用分治法求解再给出另一参考答案。 对于两个数 x 和 y,经一次比较可得到最大值和最

18、小值;对于三个数 x,y,z,最多经 3 次比较可得最大值和最小值;对于 n 个数(n 3),将分成长为 n 一 2 和 2 的前后两部分 A 和 B,分别找出最大者和最小者:Max A、Min A、Max B、Min B,最后 Max=Max A,MaxB和 Min=Min A,MinB。对 A 使用同样的方法求出最大值和最小值,直到元素个数不超过 3。 设 C(n)是所需的最多比较次数,根据上述原则,当 n3 时有如下关系式:通过逐步递推,可以得到:C(n)=(3n2)一 2。显然,当n3 时,2n 一 3(3n2)一 2。事实上,(3n2) 一 2 是解决这一问题的比较次数的下限。【知识

19、模块】 排序23 【正确答案】 假定待排序的记录有 n 个。由于含 n 个记录的序列可能出现的状态有 n!个,则描述 n 个记录排序过程的判定树必须有 n!个叶子结点。因为若少一个叶子,则说明尚有两种状态没有分辨出来。我们知道,若二叉树高度是 h,则叶子结点个数最多为 2h 一 l;反之,若有 u 个叶子结点,则二叉树的高度至少为(log2u)+1。这就是说,描述 n 个记录排序的判定树必定存在一条长度为 log2(n!)的路径。即任何一个借助“ 比较 ”进行排序的算法,在最坏情况下所需进行的比较次数至少是 log2(n!)。根据斯特林公式,有 log2(n!)=O(nlog2n)。即借助于“

20、 比较”进行排序的算法在最坏情况下能达到的最好时间复杂度为 O(nlog2n)。【知识模块】 排序24 【正确答案】 等概率(后插),插入位置 0n,则平均移动个数为 n2。不等概率,平均移动个数【知识模块】 排序【知识模块】 排序25 【正确答案】 在最好情况下,假设每次划分能得到两个长度相等的子文件,文件的长度 n=2k 一 1,那么第一遍划分得到两个长度均为n2的子文件,第二遍划分得到 4 个长度均为n4的子文件,以此类推,总共进行 k=log2(n+1)遍划分,各子文件的长度均为 1,排序完毕。当 n=7 时,k=3,在最好情况下,第一遍需比较6 次,第二遍分别对两个子文件(长度均为

21、3,k=2)进行排序,各需 2 次,共 10 次即可。【知识模块】 排序26 【正确答案】 在最好情况下快速排序的原始序列实例:4,1,3,2,6,5,7。【知识模块】 排序27 【正确答案】 在最坏情况下,若每次用来划分的记录的关键字具有最大值(或最小值),那么只能得到左( 或右)子文件,其长度比原长度少 1。因此,若原文件中的记录按关键字递减次序排列,而要求排序后按递增次序排列时,快速排序的效率与冒泡排序相同,其时间复杂度为 D(n2)。所以当 n=7 时,最坏情况下的比较次数为21 次。【知识模块】 排序28 【正确答案】 在最坏情况下快速排序的初始序列实例:7,6,5,4,3,2,1,

22、要求按递增排序。【试题解析】 此题考查的知识点是快速排序的思想。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。【知识模块】 排序29 【正确答案】 (1)堆的存储是顺序的。 (2) 最大值元素一定是叶子结点,在最下两层上。 (3)在建含有 n 个元素、深度为 h 的堆时,其比较次数不超过 4n,推导如下: 由于第 i 层上的结点数至多是 2i-1,以它为根的二叉树的深度为 h 一 i+1,则调用n 2 次筛选算法时总共进行的关

23、键字比较次数不超过下式之值:【知识模块】 排序30 【正确答案】 K 1K n 是堆,在 Kn+1 加入后,将 K1K n+1 调成堆。设c=n+1,f=c2,若 kfKc,则调整完成。否则,k f 与 Kc 交换之后,c=f ,f=c2,继续比较,k fKc,或 f=0,即为根结点,调整结束。【知识模块】 排序31 【正确答案】 void BubbleSort2(int a,int n)相邻两趟向相反方向起泡的冒泡排序算法change=1;low=0 ;high=n 一 1;冒泡的上下界while(lowai+1;change=1;有交换,修改标志 changehigh-;修改上界for(i

24、=high; ilow;i 一一)从下向上起泡if(aiai 一 1)aiai 一 1;change=1; low+;修改下界 while BubbleSort2【试题解析】 此题考查的知识点是双向冒泡算法。题目中“向上移”理解为向序列的右端,而“向下移”按向序列的左端来处理。【知识模块】 排序32 【正确答案】 typedef struct int key; datatype info RecType void CountSort(RecType a,b,int n) 计数排序算法,将 a 中记录排序放入 b 中 for(i=0;i 2 次。 简单选择排序算法比本算法好。简单选择排序比较次数

25、是 n(n 一1)2,且只用一个交换记录的空间;而这种方法比较次数是 n2,且需要另一数组空间。【知识模块】 排序33 【正确答案】 Partition(RecType R,int 1,int h)一趟快速排序算法,枢轴记录到位,并返回其所在位置int i=l;j=h ;R0=Ri;x=Ri key ;while(ij)while(ij&Rjkey=x)j-;if(ij)Ri=Rj;while(ij&Ri key=x)i+ ;if(ij)RJ=Ri; whileRi=R0;return i; Partition【知识模块】 排序34 【正确答案】 int Partition(RecType K

26、,int 1,int n)交换记录子序列 K1n中的记录,使枢轴记录到位,并返回其所在位置此时,在它之前(后)的记录均不大(小) 于它int i=1;j=n;K0=Kj ;X=KJkey;while(i=x)j-;if(i=1 ;i=i2)if(ROkeyRikey)RJ=Ri;j=i;else break;Rj=R0; siftvoid HeapBuilder(RecType R,int n)for(i=2;i0 &RjRi)调小堆Ri=Rj;i=j;j=i4;Ri=R0;else插入元素大于双亲,调大堆i=n;J:i 4;while(jO&RjRikey)插入元素大于双亲,先与双亲交换,然

27、后调大堆Rj=Ri;j=i4;while(j0&Rj0&RjRi)Ri=Rj;i=j;j=i4;Ri=R0;MinMaxHeaplns【知识模块】 排序37 【正确答案】 typedef structint key;int next;SLRecType;SLRecType RN+1;typedef structint f, e;SLQueue;SLQueue B10;int Radixsort(SLRecType R,int n) 设各关键字已输入到 R 数组中for(i=1;in ;i+)Rinext=i+1;Rn next=一 1;P=1 ; -1 表示静态链表结束for(i=0;i-9;i+)Bif=一 1;Bie=一 1;设置队头队尾指针初值while(P!=一 1)一趟分配k=RPkey ;取关键字if(Bkf=一 1)Bkf=P;修改队头指针else RBkenext=P;Bk e=P;P=RPnext ;下一记录i=0;一趟收集while(Bif=一 1)i+;t=Bie; P=Bif;while(i9)i+;if(Bif!=一 1)Rtnext=Bif;t=Bie;Rtnext=一 1;return P;返回第一个记录指针【知识模块】 排序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 大学考试

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1