0809每日一学
- 算法的时间复杂度
- 错误叙述的是()
a. 对于各种特定的输入,算法的时间复杂度是固定不变的
b. 算法的时间复杂度与使用的计算机系统无关
c. 算法的时间复杂度与使用的程序设计语言无关
d. 算法的时间复杂度与实现算法过程中的具体细节无关
答:A 算法所执行的基本运算次数还与问题的规模有关;对应一个固定的规模,算法所执行的基本运算次数还可能与特定的输入有关
- 冒泡排序法
#include<iostream>
#include<vector>
using namespace std;
void BubbleSort(vector<int> &input) {
//i是第表示第i+1次排序
for (int i = 0; i < input.size()-1; ++i) {
//排序i+1次后,找到最大的i+1个值 所以冒泡范围相对要缩小
for (int j = 0; j < input.size() - 1 - i; ++j)
//注意比较j 升序 input[j]>input[j+1] 交换
// 降序 input[j]<input[j+1] 交换
if (input[j] < input[j + 1]) swap(input[j], input[j+1]);
}
return;
}
int main() {
int n;//表示数组的大小
cin >> n;
vector<int> vec(n);
for (int i = 0; i < n; i++) {
cin >> vec[i];
}
BubbleSort(vec);
for (int i = 0; i < n; i++) {
cout << vec[i]<<" ";
}
return 0;
}
输入
5
17 39 4 29 89
输出
89 39 29 17 4
-下列排序方法中,最坏情况下时间复杂度最小的是
A)直接插入排序
B)堆排序
C)冒泡排序
D)快速排序
答案:B
【解析】对长度为n的线性表排序,在最坏情况下,冒泡排序、快速排序和直接插入排序需要比较的次数为n(n-1)/2,而堆排序需要比较的次数为O(nlog2n)。
- 5.在最坏情况下
A)快速排序的时间复杂度比希尔排序的时间复杂度要小
B)快速排序的时间复杂度与希尔排序的时间复杂度是一样的
C)希尔排序的时间复杂度比直接插入排序的时间复杂度要小
D)快速排序的时间复杂度比冒泡排序的时间复杂度要小
答案:C
【解析】对长度为n的线性表排序,在最坏情况下,冒泡排序、快速排序和直接插入排序需要比较的次数为n(n-1)/2,希尔排序所需要的比较次数为O(n1.5)。
- 位操作符号 << 、>>、&、 |只能应用于int 型
如 double n=2.5 n>>2不合法
再如 double a = 3.2; int b = 3;int c=(a - 0.2) | b;不合法
double a = 3.2;int b = 3;bool c;c = !a && (b - 3); 合法
&&:逻辑与 ||:逻辑或
&:按位与 |:按位或
假如a = 0xaa ,b = 0x55 a 1010 5 0100
a&&b = true a||b = true,
a&b = 0; a|b = 0xff; - 01 背包
输入
bagweight n(物品个数)
物品的容量和价值数组
例子
6 3
3 5
2 4
4 2
输出 最大价值 按照例子为9
#include<iostream>
#include<vector>
using namespace std;
int main() {
int bagweight, n;
cin >> bagweight >> n;
vector<int> dp(bagweight + 1);
//先遍历物品再遍历容量
for (int i = 0; i < n; i++) {
int weight, value;
cin >> weight >> value;
//注意倒序
for (int j = bagweight; j >=weight; j--)
dp[j] = max(dp[j], dp[j - weight] + value);
}
cout << dp[bagweight];
return dp[bagweight];
}
···