计算机专业基础综合数据结构(排序)模拟试卷2 (题后含答案及解析)
题型有:1. 单项选择题 2. 综合应用题
单项选择题1-40小题,每小题2分,共80分。下列每题给出的四个选项中,只有一个选项是最符合题目要求的。
1. 采用简单选择排序,比较次数与移动次数分别为(    )。
A.O(n),O(log2n)
B.O(log2n),O(n2)
C.O(n2),O(n)
D.O(nlog2n),O(n)
正确答案:C
解析:简单选择排序的关键字比较次数KCN与对象的初始排列无关。第i趟选择具有最小关键
字对象所需的比较次数总是n—i—1次(此处假定整个待排序对象序列有n个对象)。因此,总的关键字比较次数为:    最坏情况是每一趟都要进行交换,总的对象移动次数为RMN=3(n一1)。 知识模块:数据结构
2. 就排序算法所用的辅助空间而言,堆排序、快速排序、归并排序的关系是(    )。
A.堆排序<快速排序<归并排序
B.堆排序<归并排序<快速排序
C.堆排序>归并排序>快速排序
D.堆排序>快速排序>归并排序
正确答案:A
解析:此题考查的知识点为排序的空间复杂性。堆排序辅助空间为O(1),快速排序为O(log2n),归并排序为O(n)。应选A。 知识模块:数据结构
3. 一组记录的关键码为(25,48,16,35,79,82,23,40,36,72),其中,含有5个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为(    )。
A.16,25,35,48,23,40,79,82,36,72
B.16,25,35,48,79,82,23,36,40,72
C.16,25,48,35,79,82,23,36,40,72
D.16,25,35,48,79,23,36,40,72,82
正确答案:A
解析:对于(25,48,16,35,79,82,23,40,36,72),(25,48)和(16,35)归并的结果为(16,25,35,48)。(79,82)和(23,40)归并后的结果为(23,40,79,82),余下的两个记录不归并,所以一趟归并后的结果为(16,25,35,48,23,40,79,82,36,72),本题答案为A。 知识模块:数据结构
4. 已知10个数据元素为(54,28,16,34,73,62,95,60,26,43),对该序列按从小
到大排序,经过一趟冒泡排序后的序列为(    )。
A.16,28,34,54,73,62,60,26,43,95
B.28,16,34,54,62,73,60,26,43,95
C.28,16,34,54,62,60,73,26,43,95
D.16,28,34,54,62,60,73,26,43,95
正确答案:B
解析:冒泡排序每趟经过比较、交换,从无序区中产生一个最大的元素,所以选B。 知识模块:数据结构
5. 用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下:    (1)25,84,21,47,15,27,68,35,20    (2)20,15,21,25,47,27,68,35,84    (3)15,20,21,25,35,27,47,68,84    (4)15,20,21,25,27,35,47,68,84    其所采用的排序方法是(    )。
A.直接选择排序
B.希尔排序
C.归并排序
D.快速排序
正确答案:A
解析:可以看到,每趟从无序区中出一个最大的元素定位,所以答案为A。 知识模块:数据结构
6. 在对一组记录(50,40,95,20,15,70,60,45,80)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻插入位置需比较(    )次。
A.1
B.2
C.3
D.4
正确答案:C
解析:第6趟的结果为(15,20,40,50,70,95,60,45,80),此时插入60,要与95、70和50进行比较,共比较3次,本题答案为C。 知识模块:数据结构
7. 将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是(    )。
A.N
B.2N一1
C.2N
D.N一1
正确答案:A
解析:此题考查的知识点是归并排序思想。当第一个有序表中所有的元素都小于第二个表中元素,或者都大于第二个表中元素时,比较次数最少为N。 知识模块:数据结构
8. 已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为(    )。
A.O(nlog2n)
B.O(nlog2k)
C.O(klog2n)
D.O(klog2k)
正确答案:B
解析:此题考查的知识点是分块排序的思想。因组与组之间已有序,故将n/k个组分别排序即可,基于比较的排序方法每组的时间下界为O(klog2k)。可以用二叉树分治形式描述,最好
的情况是树的高度为log2k。全部时间下界为O(nlog2k)。应选B。 知识模块:数据结构
9. 已知关键序列5,8,12,19,28,20,15,22是小根堆(最小堆),插入关键字3,调整后得到的小根堆是(    )。
A.3,5,12,8,28,20,15,22,19
B.3,5,12,19,20,15,22,8,28
C.3,8,12,5,20,15,22,28,19
D.3,12,5,8,28,20,15,22,19
正确答案:A
解析:根据题目中给出的序列建立一个堆,并将其调整为小根堆,其过程如下:可以得出调整后的小根堆为3,5,12,8,28,20,15,22,19。 知识模块:数据结构
10. 归并排序中,归并的趟数是(    )。
A.O(n)
B.O(log2n)
C.O(nlog2n)
D.O(n2)
正确答案:B
解析:此题考查的知识点是归并排序。第1遍归并的子序列长度为20,第2遍为21,…,第i遍为2i-1,所以由2i-1≥n知,对n个记录的数据集合,总共需要归并log2n次。应选B。 知识模块:数据结构
11. 有一组数据(15,9,7,8,20,一1,7,4),用堆排序的筛选方法建立的初始堆为(    )。
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均不对
正确答案:C
解析:此题考查的知识点是堆排序。应选C。 知识模块:数据结构
12. 基于比较方法的n个数据的内部排序,最坏情况下的时间复杂度能达到的最好下界是(    )。
A.O(nlog2n)
B.O(log2n)
C.O(n)
D.D(n2)
正确答案:A
解析:此题考查的知识点是各类排序的效率。理论上可以证明,对于基于关键字之间比较的分类,无论用什么方法都至少需要进行log2(n!)次比较。由Stirling公式可知,log2(n!)=nlog2n一1.44n+O(log2n)。所以基于关键字比较的分类时间的下界是O(nlog2n)。因此不存在时间复杂性低于此下界的基于关键字比较的分类。应选A。 知识模块:数据结构
13. 以下排序方法中,稳定的排序方法是(    )。
A.直接插入排序
B.直接选择排序
C.堆排序
D.基数排序
二叉树前序中序后序图解正确答案:A
解析:下表为各种排序方法的性能比较。由表可知,本题答案为A。 知识模块:数据结构
14. 在对一组记录(50,40,95,20,15,70,60,45,80)进行希尔排序时,假定d0=9,d1=4,d2=2,d3=1,则第二趟排序结束后前4条记录为(    )。
A.(50,20,15,70)
B.(60,45,80,50)
C.(15,20,50,40)
D.(15,20,80,70)
正确答案:C
解析:t=3,d0=9,d1=4,d2=2,d3=1,第1趟(d1=4)后的结果为(15,40,60,20,50,70,95,45,80),第2趟(d2=2)后的结果为(15,20,50,40,60,45,80,70,95),本题答案为(15,20,50,40)。 知识模块:数据结构
15. 在归并排序中,若待排序记录的个数为20,则共需要进行(    )趟归并,在第三趟归并中,是把长度为(    )的有序表归并为长度为(    )的有序表。
A.5,4,8
B.6,3,9
C.7,4,3
D.3,8,2
正确答案:A
解析:n=20,共需进行[log2n]=5趟归并,第1趟归并后成为10个有序表,第2趟归并后成为5个有序表(每个长度为4),第3趟归并将长度为4个的有序表归并为长度为8的有序表,本题答案为:5,4,8. 知识模块:数据结构
综合应用题41-47小题,共70分。
16. 已知关键字序列(K1,K2,K3,…,Kn-1)是大根堆。试写出一算法将(K1,K2,K3,…,Kn-1,Kn)调整为大根堆,并利用调整算法写一个建大根堆的算法。
正确答案:void sift(RecType R[],int n){    //把R[n]调成大堆    int j=n;R[0]=R[j];    for(i=n/2;i>=1;i=i/2)    if(R[0].key>R[i].key){R[j]=R[i];j=i;}    else break;    R[j]=R[0];    }      void HeapBuilder(RecType R[],int n){    for(i=2;i<=n;i++)sift(R,i);    }    提示:此题考查的知识点是堆的插入算法。从第n个记录开始依次与其双亲(n/2)比较,若大于双亲则交换,继而与其双亲的双亲比较,以此类推直到根为止。      涉及知识点:数据结构
17. 最小最大堆(min max Heap)是一种特定的堆,其最小层和最大层交替出现,根总是处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆。    (1)画出在图中插入关键字为5的结点后的最小最大堆。    (2)画出在图中插入关键字为80的结点后的最小最大堆。    (3)编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。
正确答案:此题考查的知识点是堆的算法。将插入的元素放到最后,然后调整,方法同第13题。    (1)加入关键字值为5的结点后,最小最大堆如下图。(2)加入关键字值为80的结点后,最小最大堆如下图。    (3)从插入位置进行调整,调整过程由下到上。首先根据元素个数求出
插入元素所在层次数,以确定其插入层是最大层还是最小层。若插入元素在最大层,则先比较插入元素是否比双亲小,如是,则先交换,之后,将小堆与祖先调堆,直到满足小堆定义或到达根结点:若插入元素不小于双亲,则调大堆,直到满足大堆定义。若插入结点在最小层,则先比较插入元素是否比双亲大,如是,则先交换,之后,将大堆与祖先调堆;若插入结点在最小层且小于双亲,则将小堆与祖先调堆,直到满足小堆定义或到达根结点。    void MinMaxHeapIns(RecType R[],int n){    //假设R[1..n一1]是最小最大堆,插入第n个元素,把R[1..n]调成最小最大堆    j=n;R[0]=R[j];    h=log2n+1;    //求高度if(h%2==0){    //插入元素在偶数层,是最大层    i=n/2;    if(R[0].key<R[i].key){    //插入元素小于双亲,先与双亲交换,然后调小堆    R[j]=R[i];    j=i/4;    while(j>0&&R[j]>R[i]){  R[i]=R[j];i=j;j=i/4;}  //调小堆    R[i]=R[0]i    }    else{    //插入元素大于双亲,调大堆    i=n;j=i/4;    while(j>0&&R[j]<R[i]){R[i]=R[1];i=j;j=i/4;}    R[i]=R[0];      }    }    else{    //插入元素在奇数层,是最小层    i=n/2:    if(R[0].key>R[i].key){    //插入元素大于双亲,先与双亲交换,然后调大堆    R[j]=R[i];    j=i/4;    while(j>0&&R[j]<R[i]){  R[i]:R[j]=i:j;j=i/4;  }  //调大堆    R[i]=R[0];    }    else{    //插入元素小于双亲,调小堆    i=n;j=i/4;    while(j>0&&R[j]>R[i]){  R[i]=R[j];i=j;j=i/4;}    R[i]=R[0];      }    }}      涉及知识点:数据结构

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。