0809每日一学

0809每日一学

  1. 算法的时间复杂度
  • 错误叙述的是()
    a. 对于各种特定的输入,算法的时间复杂度是固定不变的
    b. 算法的时间复杂度与使用的计算机系统无关
    c. 算法的时间复杂度与使用的程序设计语言无关
    d. 算法的时间复杂度与实现算法过程中的具体细节无关
    答:A 算法所执行的基本运算次数还与问题的规模有关;对应一个固定的规模,算法所执行的基本运算次数还可能与特定的输入有关
  1. 冒泡排序法
#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)。
  1. 位操作符号 << 、>>、&、 |只能应用于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;
  2. 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];
}
···
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值