解:对
解析:内存的操作速度远高于外设,内存与外设交换数据是瓶颈
A.a7和a16
B.a11和a13
C.a1和a14
D.a3和a12
解:D
解析:
第一次:比较:(0+16)/2 = 8,比较a8
第二次:比较: (0+7) / 2 = 3 或者 (9+16) //2=12
解:错
解析: 二分查找针对的有序
A.直接选择排序
B.直接插入排序
C.快速排序
D.起泡排序
解:C
解析:
快速排序将数据按照基准数据分为左右两部分,左边都比基准数据小,右边都比基准数据大,按照中间位置,递归左右两侧,直到只有一个数据时,排序完成。
A.仅Ⅰ
B.仅Ⅱ
C.仅Ⅰ、Ⅱ
D.仅Ⅱ、Ⅲ
解:D
解析:
Hash表的查找效率取决于散列函数、处理冲突的方法和装填因子。显然,冲突的产生概率与装填因子(表中记录数与表长之比)的大小成正比,即装填得越满越容易发生冲突,Ⅰ错误。Ⅱ显然正确。采用合适的处理冲突的方式避免产生聚集现象,也将提高查找效率,例如用拉链法解决冲突时就不存在聚集现象,用线性探测法解决冲突时易引起聚集现象,Ⅲ正确。
A.'\007'
B.'\b'
C.'a'
D."\09"
解:D
解析:
字符常量是用单引号括起来的一个字符。例如:'a'、'='、'+'等。转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。D选项中'\09',\0表示后面的字符是八进制数。又出现9所以是非法的,故D选项正确。
解:错误
解析:
在二叉排序树中,最小元素所在结点一定是中序遍历序列中第一个被访问的结点,即是二叉树的最左下结点,但可能有右子树。最大元素所在结点一定是中序遍历序列中最后一个被访问的结点,即是二叉树的最右下结点,但可能有左子树。
1
\
3
/ \
2 4
这样最小值1就是根节点
解:错
解析:子串定义:串中任意个连续的 字符 组成的子序列
解:对
解析:
归并排序是将两个长度想当序列合并成一个序列,初始序列长度为m,那么合并之后的平均长度为2m
A.直接插入排序
B.起泡排序
C.基数排序
D.快速排序
解:C
解析:基数排序的元素移动次数与关键字的初始排列次序无关,而其他三种排序都是与关键字的初始排列明显相关的。
A.35/12
B.37/12
C.39/12
D.43/12
解:B
解析:
题目已知元素序号(即下标)范围为1~12。查找1次成功的结点为:6。查找2次成功的结点为:3,9。查找3次成功的结点为:1,4,7,11。查找4次成功的结点为:2,5,8,10,12。成功查找所有结点的总的比较次数为:1×1+2×2+3×4+4×5=37平均比较次数为37/12。因此选择B。
A.2 B.3 C.5 D.0
解:D
解析:二维数组各元素在内存当中是连续存放的,将所有元素写在一个花括号内,会按照数组元素在内存当中的排列顺序对各元素赋初值。a[0][0],a[0][1],a[0][2],a[1][0],a[1][1]分别被赋值为1,2,3,4,5,而a[1][2]没有被赋值,当进行了初始化这个动作,没有在初始化列表中初始化的元素统一赋值为0!
A.[n/2]
B.[n/2]-1
C.1
D.[n/2]+2
解:D
解析:小根堆中最大的数一定是放在叶子节点上,堆本身是个完全二叉树,完全二叉树的叶子节点的位置大于[n/2]
A.2 B.3 C.4 D.6
解:C
解析:
第1次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=0,right=13,mind=6; mid值为42,太大
第2次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=0,right=5,mind=2; mid值为6,太小
第3次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=3,right=5,mind=4; mid值为18,太小
第4次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=5,right=5,mind=5; mid值为35,找到了
A.int a[3][];
B.float a(3,4)
C.double a[][4];
D.float a(3)(4);
解:C
A.Dijkstra算法用于求解图中两点间最短路径,其时间复杂度O(n^2)
B.Floyd-Warshall算法用于求解图中所有点对之间最短路径,其时间复杂度为O(n^3)
C.找出n个数字的中位数至少需要O(n*logn)的时间
D.基于比较的排序问题的时间复杂度下界是O(n*logn)
解:C
解析:利用顺序统计思路找出n个数字的中位数可以再O(n)时间内完成,所以C错误。
A.let b=a;
B.let b=a.slice();
C.let b=a.splice(0,0);
D.let b=a.concat();
解:D
解析:
A选项 b=[1,2,3] b==a
B选项 b=[1,2,3] b!=a
C选项 b=[] b!=a
D选项 b=[1,2,3] b!=a
A.0 B.1 C.2 D.3 E.4 F.5
解:C
解析:
按整数数组的最大堆定义,每次调整完后根结点的元素与最后个元素交换,继续下次调整,直到所有的结点调整完毕。
原数组为 7 6 3 5 4 1 2 满足最大堆定义,直接交换根节点元素
2 6 3 5 4 1 7,交换完毕
6 5 3 2 4 1 7,调整完毕
1 5 3 2 4 6 7,交换完毕
5 4 3 2 1 6 7,调整完毕
1 4 3 2 5 6 7,交换完毕
4 2 3 1 5 6 7,调整完毕
1 2 3 4 5 6 7,交换完毕,此时虽然已有序,但仍需进行最大堆调整,因为最大堆算法时间复杂度为nlog2n,会进行继续搜索调整
3 2 1 4 5 6 7,调整完毕,移动一次
1 2 3 4 5 6 7,交换完毕,移动两次
2 1 3 4 5 6 7,调整完毕
1 2 3 4 5 6 7,交换完毕
A.2
B.3
C.4
D.5
解:C
解析:
直接插入排序(straight insertion sort)的做法是:
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
大概是:24直接放进去 24
第一趟 15比24小放到24前面,比较1次 15 24第二趟 32比24大放24后面,比较1次 15 24 32
第三趟 28比32小,比24大,比较2次 15 24 28 32
第四趟,19比32小,比28小,比24小,比15大,比较4次 15 19 24 28 32
A.i*(i-1)/2+j
B.j*(j-1)/2+i
C.i*(i+1)/2+j
D.j*(j+1)/2+i
解:B
解析:
矩阵下标从1,1开始;一维数组下标从1开始;
故对应关系为:
当i>=j时,k=i(i-1)/2+j;
当i<=j时,k=j(j-1)/2+i;
题干中有个条件(i<j),算是一个坑,所以选B不选A