X32专项练习部分24
二分法查找时间复杂度
/*
一个长度为 n 的正整数数列,先递减再递增,如果要找到数列中最小的正整数
最优算法的平均时间复杂度是
O(n)
O(nlog(n))
O(n^2)
O(log(n))
二分法找中点,中点左右两边数都比中点大就结束,否则就向较低的一边搜索
查找数据长度为N,每次查找后减半,
补充1下二分法查找时间复杂度
第1次 N/2
第2次
...
第k次 N/2^k
最坏的情况下第k次才找到,此时只剩一个数据,长度为1
即 N/2^k = 1
查找次数 k=log(N)
*/
堆排序调整顺序
/*
将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列
请问在整个排序过程中,元素3的数组下标发生过几次改变
正确答案: C
0
1
2
3
如下图,可以看出3的索引一共改变了2次
*/
通过元素序列的变化推断排序算法
/*
对数列 (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
快速排序
简单选择排序
希尔排序
归并排序
1 是原数组
1 到 2: 取第一个数25,放到它应该在的位置
25左边的数都比25小,右边的都比25大
2 到 3: 对25左边的数列和25右边的数列{20,15,21},{47,27,68,35,84}分别进行快速排序
同样先取各数列的第一个数20和47,使其分别放到应该在的位置
即左边的数都比它小,右边的都比它大;
3 到 4: 对{15},{21},{35,27},{68,84}四个子序列进行排序,最终排序完成;
所以是快速排序
简单选择排序是每次把最小的元素放在最前面
希尔排序是每次比较对应位置,第1个位置与中间元素后1个位置交换
归并排序第1趟结果应该是两两比较,2个中较小的部分放在前面
*/
树对应二叉树遍历顺序
/*
将一棵树t 转换为孩子—兄弟链表表示的二叉树h
则t的后根序遍历是h的()
正确答案: B
前序遍历
中序遍历
按层次遍历
后序遍历
树的先序遍历对应二叉树的先序遍历
树的后序遍历对应二叉树的中序遍历
树转换成二叉树遵循左孩子右兄弟原则
*/
二叉树前序遍历和后序遍历相反的情况
/*
某二叉树,其度为1的节点数为n1,度为2的节点数为n2
且先序遍历和后序遍历序列正好相反
则此二叉树的深度为()
正确答案: C
2*n1+n2+1
n1+n2
n1+2*n2+1
2*n1+n2
前序和后序相反,说明是一条链表
举例子来说
就是左斜链和右斜链
只有这2种情况满足前序后序相反
因此深度就是结点数
度为1的结点数为n1,度为0的结点数为1
因为只有唯一的叶子节点
所以答案是n1 + 1
因为n2 = 0
所以C选项符合答案
*/
二叉树线索化的空指针域个数
/*
一棵左右子树不空的二叉树在先序线索化后
其空指针域数为()
正确答案: B
0
1
2
不确定
这里我举1个栗子
A
/ \
B E
/ \
C D
就举上面的栗子
C节点有2个空指针域
左空指针指向前驱节点B
右空指针指向后继节点D
D节点有2个空指针域
左空指针指向前驱节点C
右空指针指向后继节点E
E节点有2个空指针域
左空指针指向前驱节点D
右空指针指向后继节点null(空指针域)
所以一共有1个空指针域
有1个结论
前序和后续线索化空指针域都是1,中序是2
以后直接拿来用就行
*/
三叉链表存储二叉树空指针域个数
/*
用三叉链表作二叉树的存储结构
当二叉树中有n个结点时,有()个空指针
正确答案: C
n+1
n
n+2
n-1
下面我根据个人理解画了1张图
*/
三叉树带权路径最小值
/*
已知三叉树T中6个叶结点的权分别是 2, 3, 4, 5, 6, 7
T 的带权(外部)路径长度最小是()
正确答案: B
27
46
54
56
节点偶数要加个0,奇数个就不用
所以在构建哈夫曼树的时候最底层有1个0
取2个元素就行
*/