数据结构笔试题(单选)
2015-08-13 11:03
155 查看
1.一个从大到小的数组,按从小到大的顺序排序,哪种排序方法最快?(最坏情况)
(1)冒泡排序:1+2+...n-1=O(n^2);
(2)快速排序:每次partion都需要比较k-1次,才能将“第一个”数字移动到“末端”。需要进行n-1次partion才能完成排序。所以最坏情况下比较次数仍然是1+2+..+n-1=O(n^2);
(3)插入排序:2+3+...+n=O(n^2);
(4)堆排序:O(nlogn)。
补充:平均情况下,这几种排序算法的比较:
(1)快速排序:平均时间复杂度为O(nlogn);最坏时间复杂度O(N^2);快速排序需要一个栈作辅助空间,用来实现递归处理左、右子文件,在最坏情况下,递归深度为n,所需栈的空间大小为O(n)数量级;不稳定的排序方法。
(2)冒泡排序:最坏时间复杂度O(N^2);最好时间复杂度为n-1;少量辅助空间O(1);稳定的排序方法。
(3)插入排序:平均复杂度为O(N^2);最坏情况=(n-1)(n+2)/2 (次);少量中间变量,为常量级O(1);稳定的排序方法。
(4)堆排序:平均复杂度及最坏情况的复杂度都是O(nlogn);适用于大数据量的排序。
2.关于循环队列说法正确的是:D
A.循环队列不是线性结构;
B.仅用头指针就可以描述循环序列中元素的变化过程;
C.仅用尾指针就可以描述循环序列中元素的变化过程;
D.循环队列中元素的个数是有队头指针和队尾指针共同决定。
解析:队列长度=(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
Q.rear=Q.front时可能为空队列,也可能为满队列;解决办法:少用一个元素空间,以队列头指针在队列尾指针的下一位置(环状的下一位置)上作为满状态标志。
3.设一棵二叉树中有3个叶子节点,有8个度为1的节点,则该二叉树中总的节点数为? 3+2+8=13
解析:度为1的结点数8+度为0的结点数2+度为2的结点数(3-1)=13;
4.在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是 O(n)
解析:找到一个长度为n的数组中第k大的数的最优化时间复杂度为O(n)。
将长度为k的数组进行partition,要比较的次数为k。在长度为n的数组中查找第k大的数字,最坏情况下要进行n-k次partition,复杂度为n+n-1+n-2+...+n-k=kn+k(k+1)/2=O(n)。
(1)冒泡排序:1+2+...n-1=O(n^2);
(2)快速排序:每次partion都需要比较k-1次,才能将“第一个”数字移动到“末端”。需要进行n-1次partion才能完成排序。所以最坏情况下比较次数仍然是1+2+..+n-1=O(n^2);
(3)插入排序:2+3+...+n=O(n^2);
(4)堆排序:O(nlogn)。
补充:平均情况下,这几种排序算法的比较:
(1)快速排序:平均时间复杂度为O(nlogn);最坏时间复杂度O(N^2);快速排序需要一个栈作辅助空间,用来实现递归处理左、右子文件,在最坏情况下,递归深度为n,所需栈的空间大小为O(n)数量级;不稳定的排序方法。
(2)冒泡排序:最坏时间复杂度O(N^2);最好时间复杂度为n-1;少量辅助空间O(1);稳定的排序方法。
(3)插入排序:平均复杂度为O(N^2);最坏情况=(n-1)(n+2)/2 (次);少量中间变量,为常量级O(1);稳定的排序方法。
(4)堆排序:平均复杂度及最坏情况的复杂度都是O(nlogn);适用于大数据量的排序。
2.关于循环队列说法正确的是:D
A.循环队列不是线性结构;
B.仅用头指针就可以描述循环序列中元素的变化过程;
C.仅用尾指针就可以描述循环序列中元素的变化过程;
D.循环队列中元素的个数是有队头指针和队尾指针共同决定。
解析:队列长度=(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
Q.rear=Q.front时可能为空队列,也可能为满队列;解决办法:少用一个元素空间,以队列头指针在队列尾指针的下一位置(环状的下一位置)上作为满状态标志。
3.设一棵二叉树中有3个叶子节点,有8个度为1的节点,则该二叉树中总的节点数为? 3+2+8=13
解析:度为1的结点数8+度为0的结点数2+度为2的结点数(3-1)=13;
4.在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是 O(n)
解析:找到一个长度为n的数组中第k大的数的最优化时间复杂度为O(n)。
将长度为k的数组进行partition,要比较的次数为k。在长度为n的数组中查找第k大的数字,最坏情况下要进行n-k次partition,复杂度为n+n-1+n-2+...+n-k=kn+k(k+1)/2=O(n)。
相关文章推荐
- 微软公司等数据结构+算法面试100题(第1-100题)全部出炉
- 数据结构之二叉树详解
- 数据结构日常笔记总结
- 图论-BFS解无权有向图最短路径距离
- H264数据结构
- nginx源码分析2———基础数据结构五(ngx_hash_wildcard_t)
- 中国大学MOOC-陈越、何钦铭-数据结构基础习题集 00-自测1. 打印沙漏(20)
- 数据结构
- 【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns
- 数据结构(Java语言)——Stack简单实现
- 数据结构-双向链表(学习笔记)
- 数据结构-循环链表(学习笔记)
- nginx的数据结构集合(随时更新)
- C源码@数据结构与算法->队列(queue)
- 什么是算法,什么是数据结构
- 智渔课堂官方免费教程三十七:Java数据结构之单向链表结构
- I学霸官方免费教程三十七:Java数据结构之单向链表结构
- 智渔课堂官方免费教程三十六:Java数据结构之双向链表结构
- I学霸官方免费教程三十六:Java数据结构之双向链表结构
- 快速排序(qsort and sort)