#GESP202606C5T2. 判断题(每题 2 分,共 20 分)
判断题(每题 2 分,共 20 分)
- 数组的存储空间在物理上通常是连续的,而链表的结点可以存储在不连续的内存空间中。
{{ select(1) }}
- 正确
- 错误
- 带哨兵头尾节点的双向循环链表,在表头插入节点
p,以下四步操作无论什么顺序执行结果都正确。 ①p->next = head->next;②p->prev = head;③head->next->prev = p;④head->next = p;
{{ select(2) }}
- 正确
- 错误
- 对任意正整数
a、b,以下两种写法的gcd函数返回值完全相同。
int gcd1(int a, int b) {
return b ? gcd1(b, a % b) : a;
}
int gcd2(int a, int b) {
while (b) {
int t = b;
b = a % b;
a = t;
}
return a;
}
{{ select(3) }}
- 正确
- 错误
- 在归并排序的合并操作中,如下代码片段可以正确地将两个已排序的子数组
L和R合并回原数组arr中。
void merge(int arr[], int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
vector<int> L(n1), R(n2);
for (int i = 0; i < n1; i++) L[i] = arr[left + i];
for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j];
int i = 0, j = 0, k = left;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) arr[k++] = L[i++];
else arr[k++] = R[j++];
}
while (i < n1) arr[k++] = L[i++];
while (j < n2) arr[k++] = R[j++];
}
{{ select(4) }}
- 正确
- 错误
- 分治法通常将一个规模较大的问题拆分为若干个规模较小、结构相似的子问题,分别求解后再合并子问题的结果。
{{ select(5) }}
- 正确
- 错误
- 贪心算法只要每一步选择当前最优解,就一定能得到全局最优解。
{{ select(6) }}
- 正确
- 错误
- 二分查找不仅可以应用于有序数组,也可以在不增加时间复杂度的情况下应用于有序的单链表,因为链表也支持 时间内的随机访问。
{{ select(7) }}
- 正确
- 错误
- 以下函数
f1的时间复杂度比函数f2的更高。
void f1(int n) {
for (int i = 1; i < n; i *= 2);
}
void f2(int n) {
if (n <= 1) return;
f2(n - 1);
f2(n - 1);
}
{{ select(8) }}
- 正确
- 错误
- 唯一分解定理表明,任何一个大于 的自然数都可以唯一地分解为若干个质数的乘积,如果不考虑质因数的顺序,这种分解方式是唯一的。
{{ select(9) }}
- 正确
- 错误
- 归并排序和快速排序在平均情况下的时间复杂度均为 。但在稳定性方面,归并排序通常是不稳定的,而快速排序是稳定的。
{{ select(10) }}
- 正确
- 错误