选择题
- 一个排序算法的时间复杂度与(B)有关
A.排序算法的稳定性
B.所需比较关键字的次数
C.所采用的存储结构
D.所需辅助存储空间的大小 - 快速排序和归并排序在最坏情况下的比较次数都是O(nlog2 n)(B)
A.对
B.错
解析:
归并排序的最坏情况,最好情况和平均情况都是O(nlogn); 快速排序的最坏情况是O(n^2),最好的情况和平均情况是O(nlogn) - 从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较____C____个元素结点。
A.n/2
B.n
C.(n+1)/2
D.(n-1)/2 - 对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为( A )
A.(N+1)/2
B.N/2
C.N
D.[(1+N)*N ]/2
解析;
第一个数的比较次数为1,第二个数的比较次数为2。。。以此类推第N个数的比较次数为N,所以总的比较次数为1+2+…+N=N(N+1)/2,平均比较次数为(N+1)/2,也即平均查找长度。 - 采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是(D)。
A.递归次数与初始数据的排列次序无关
B.每次划分后,先处理较长的分区可以减少递归次数
C.每次划分后,先处理较短的分区可以减少递归次数
D.递归次数与每次划分后得到的分区的处理顺序无关
解析:
快递排序的递归次数与元素的初始排列有关。如果每一次划分后分区比较平衡,则递归次数少;如果划分后分区不平衡,则递归次数多。但快速排序的递归次数与分区处理顺序无关,即先处理较长的分区或先处理较短的分区都不影响递归次数。
此外,可以形象地把快速排序的递归调用过程用一个二叉树描述,先处理较长或较短分区,可以想象为交换某一递归结点处的左右子树,这并不会影响树中的分支数。 - 关于依赖注入,下列选项中说法错误的是(B)
A.依赖注入能够独立开发各组件,然后根据组件间关系进行组装
B.依赖注入使组件之间相互依赖,相互制约
C.依赖注入提供使用接口编程
D.依赖注入指对象在使用时动态注入
解析:
依赖注入和控制反转是同一概念:
依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。 - 在一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动 (A) 个元素。
A.n-i
B.n-i+l
C.n-i-1
D.i - @SuppressWarnings(“deprecation”)的功能是什么?(A)
A.屏蔽不赞同使用的类和方法的警告
B.屏蔽在强制类型转换的时候编译器给出的警告
C.关闭所有警告信息
D.当在可序列化的类上缺少serialVersionUID定义的警告
解析:
本题考查注解编程,对java三大注解是否了解:
@SuppressWarnings这是java三大注解之一,主要功能是屏蔽相应的警告。
里面的deprecation修饰符则是对java中已经过时或者废弃方法的警告。
@SuppressWarnings(“deprecation”)的功能是屏蔽不赞同(就是过时废弃的意思)使用的类和方法的警告。
Java自带的三大注解:@Override @Deprecated @SuppressWarnings() - 下列关于堆和栈的区别描述错误的有?(A)
A.申请方式的不同,堆是系统自动分配,栈是自己申请
B.栈的大小是固定的,堆的大小受限于系统中有效的虚拟内存
C.栈的空间由系统决定何时释放,堆需要自己决定何时去释放
D.堆的使用容易产生碎片,但是用起来最方便 - 有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在有25个不重复的数字,请问小白同学最少调几次该函数,可以找出其中最大的三个数?(C)
A.5
B.6
C.7
D.8
解析:
1>25人分5组调用,分别排序,调用5次
2>取出5组中的最大数,排序,调用1次
3>将第2步排序中最大的三组取出,假设为A,B,C,从第二步已知A[1]>B[1]>C[1],不需要再比较,选A[2]、A[3]、B[1]、B[2]、C[1]比较。不需要比较B[3]是因为A[1]已经最大了,若剩下两个数在B中,A[1]占了一个数,只剩两个位置,C[1]同理,轮到C[1]的时候,前面A[1]>B[1]已经占了两个位置。调用1次
总共 5+1+1=7次