牛客网-排序题目分享(2)

第一题

在下列排序算法中,哪一个算法的时间复杂度与初始排序无关( )。
正确答案: D 你的答案: D (正确)
直接插入排序
气泡排序
快速排序
直接选择排序

堆归选基与初始序列无关 快选希堆排序不稳定
就是说堆排序,归并排序,选择排序,基数排序与他自己的初始序列无关,不会因为他初始数列改变而改变,而快速排序,选择排序,希尔排序。对排序都不稳定,可能出现,相同大小的数字,相对排序不一样

第二题

顺序表查找指的是在顺序存储结构上进行查找。( )
正确
错误
正确答案: A

顺序查找指从第一个数据元素开始查找到最后
而顺序表查找是顺序存储结构上进行查找
采用顺序存储结构的线性表通常称为顺序表。

第三题

4个圆盘的Hanoi塔,总的移动次数为()
7
8
15
16
正确答案: C

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
设移动n个盘子的汉诺塔问题需要g(n)次移动操作来完成。由展示移动过程算法可知g(n)应是三部分之和。
(1) 将n个盘上面的n-1个盘子借助C桩从A桩移到B桩上,需g(n-1)次移动;
(2) 然后将A桩上第n个盘子移到C桩上(1次);
(3) 最后,将B桩上的n-1个盘子借助A桩移到C桩上,需g(n-1)次。
因而有递归关系:
g(n)=2*g(n-1)+1
初始条件(递归出口):
g(1)=1
即 1、3、7、15、31。。。即g(n) = 2^n -1

第四题

已知栈s允许在两端出栈,但只允许在一端入栈;队列Q只允许在一 端入队列,在另一端出队列。设栈s和队列Q的初始状态为空, el,e2,e3, e4,e5,e6依次通过栈S,一个元素出栈后即进队列Q,则不可能得到的出队列的顺序是( )
正确答案: C
e2,e4,e3,e5,e1,e6
e2,e5,el,e3,e4,e6
e5,e1,e6,e3,e2 ,e4
e4,el,e3,e5,e2,e6

以下假设栈的内容为e1,e2,e3时,e1为栈底,e3为栈顶。
出队序列和入队序列相同,所以只求入队序列就可以了。
选项A:e2,e4,e3,e5,e1,e6
1、入栈e1,e2,出栈e2,然后e2入队列Q,此时栈S内容为e1
2、入栈e3,e4,分别出栈e4,e3,然后e4,e3依次入队列Q,此时栈内容为e1
3、入栈e5,分别出栈e5,e1,然后e5,e1依次入队列Q,此时栈内容为空
4、入栈e6,出栈e6,然后e6入队列Q,此时栈内容为空
选项B:e2,e5,el,e3,e4,e6
1、入栈e1,e2,出栈e2,然后e2入队列Q,此时栈S内容为e1
2、入栈e3,e4,e5,分别出栈e5,e1,e3,e4,然后e5,e1,e3,e4依次入队列Q,此时队列为空
3、入栈e6,出栈e6,然后e6入队列Q,此时栈内容为空
选项C:e5,e1,e6,e3,e2,e4
1、入栈e1,e2,e3,e4,e5,分别出栈e5,e1,然后e5,e1入队列Q,此时栈S内容为e2,e3,e4
2、入栈e6,出栈e6,然后e6入队列Q,此时栈内容为e2,e3,e4
3、栈内容为e2,e3,e4,此时想让e3出栈是不可能的,所以C不对
选项D:e4,el,e3,e5,e2,e6
1、入栈e1,e2,e3,e4,分别出栈e4,e1,e3,然后e4,e1,e3依次入队列Q,此时栈内容为e2
2、入栈e5,分别出栈e5,e2,然后e5,e2依次入队列Q,此时栈内容为空
3、入栈e6,出栈e6,然后e6入队列Q,此时栈内容为空
选项一个个的套就可以了,遵守题目规定的入栈出栈、入队出队顺序即可,想让谁入队,就得先让他出栈,他要想出栈,一定要在栈的两端

第五题

字符序列(‘D’,’Q’, ‘U’, ‘I’, ‘A’, ’N’)只能是下列哪个排序算法两趟排序后的结果?
正确答案: C
选择排序
冒泡排序
插入排序
堆排序

QUDIAN
最小字母为A 最大字母为U,若升序排序完成顺序应该是ADINQU
两趟排序导致QU是有序的,其他四个字母还无序,选择排序则QU应该在后面,冒泡和堆排序两趟也会使元素到达他最终位置,所以排除
选择C

第六题

用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是多少?
正确答案: C
O+P
2O+1
2P+1
2O-1

保证入队完毕之后才可以出队;
分析:栈的特点是“后进先出(LIFO)”,而队列的特点是“先进先出(FIFO)”。用两个栈模拟实现一个队列的基本思路是:用一个栈作为存储空间,另一个栈作为输出缓冲区,入队时把元素按顺序压入两栈模拟的队列,出队时按入队的顺序出栈即可。
如下,用容量为m(较大的)的栈作为存储空间,容量为n的栈作为输出缓冲区,先将入队的前n个元素push进存储空间栈
随后对存储空间栈中的每个元素进行出栈(pop)操作,继而压入(push)输出缓冲区栈,如下图所示
对于剩余入队的前n+1个元素,将他们压入存储空间栈,两个栈的状态如下图:
此时已经入队了2n+1个元素,若此时进行出队操作,先将输出缓冲区栈中的元素出栈(pop)并输出:Q1,Q2,……,Qn,再对存储空间栈中的n个元素进行出栈(pop)并压入输入缓冲区栈,状态图如下:
然后对存储空间栈进行一次出栈(pop)操作并输出:Qn+1,最后再对输出缓冲区栈中的所有元素进行出栈(pop)操作并输出Qn+2,Qn+3,……,Q2n,Q2n+1。这样两个栈总的输出序列为:Q1,Q2,……,Qn,Qn+1,Qn+2,Qn+3,……,Q2n,Q2n+1,符合队列“先进先出”的特性,模拟成功。
但是如果前面蓝字的假设不成立,即在已经入队了2n+1个元素的情况下,还要继续向队列中添加更多的元素,将无法满足按入队的顺序出队。
综上所述,两个栈所模拟的队列的最大容量为2n+1。

第七题

对[21, 49, 84, 45, 12]进行基数排序,第一趟排序的结果为:()
正确答案: A
[21, 12, 84, 45, 49]
[12, 21, 45, 49, 84]
[12, 21, 49, 45, 84]
[21, 12, 45, 49, 84]

对10取余排序,即按个位数大小进行排序

第八题

有字符序列(Q,H,C,Y,P,A,M,S,R,D,F,X),新序列(F,H,C,D,A,M,P,S,R,Y,Q,X)是下列( )排序算法一趟扫描结果。
正确答案: B
堆排序
快速排序
希尔排序
冒泡排序

一趟快速排序意思是:寻找一个支点,将该序列位置整个调整一边,可以看到M是支撑点,左边都是比M小的,右边都是比M大的,
注意:支点不一定是左边第一个数,可以任意选的。

第九题

关于快速排序,下列说法正确的有()
正确答案: A B
快速排序是基于比较的排序
快速排序使用了分治的思想
在某些特殊数据中,快速排序的时间复杂度可以达到O(n)
快速排序只能使用递归方式实现

在这里插入图片描述

第十题

下列关于数组与指针的区别描述正确的是?
正确答案: B
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。
用运算符sizeof 可以计算出数组的容量(字节数)
指针可以随时指向任意类型的内存块。
用运算符sizeof 可以计算出指针所指向内容的容量(字节数)

A.堆上创建动态数组
B.sizeof(数组名)就是数组的容量
C.const指针不可以
D. char* str = “hello”; sizeof(str)不能计算出内容的容量,只是指针的容量。

发布了38 篇原创文章 · 获赞 51 · 访问量 1191

猜你喜欢

转载自blog.csdn.net/xweiwxh/article/details/104457759