计数排序算法的时间复杂度与实现
内容概要:本文介绍了计数排序的基本思想、时间复杂度O(n+k)、空间复杂度O(k)以及其稳定性。详细描述了计数排序是一种非比较类型的排序算法,通过统计每个值出现的次数来完成排序。提供了一个C++实现的示例代码。
适合人群:适合计算机科学专业的学生或有基本编程知识的开发者。
使用场景及目标:学习和理解计数排序的原理及其应用场景,能够自行实现并优化计数排序算法。
阅读建议:本文提供了详细的代码实现,建议结合代码边读边练习,更好地掌握计数排序的原理和实现细节。
数据结构与算法-选择排序C++实现
内容概要:本文详细介绍了选择排序算法的基本原理及其时间复杂度、空间复杂度,并通过C++代码展示了其实现方式。选择排序是一种不稳定排序方法,它每次从未排序部分中选取最小的元素放置到当前有序部分的末尾。
适合人群:具备基础编程能力和数据结构知识的学生和程序员。
使用场景及目标:适用于需要理解排序算法原理及其具体实现的学习者。目标是帮助读者掌握选择排序的基本思想和代码实现。
阅读建议:通过本文学习时,应重点理解排序过程中的比较和交换操作,并结合代码实践加深对算法的理解。
排序算法中插入排序C++实现及其特性
内容概要:本文介绍了插入排序的基本概念,时间复杂度为O(n^2),空间复杂度为O(1),属于稳定排序。插入排序的基本思路是将一个记录插入到已经排好序的有序表中,从而构建一个新有序表。文中提供了用C++实现的插入排序的具体代码示例,包括输入数组,通过两层循环调整元素顺序,最后输出排序后的结果。
适合人群:正在学习排序算法的初学者和具备一定编程能力的技术人员。
使用场景及目标:用于学习排序算法的实现方式及应用,在实际开发中可以用来理解排序的基本操作,掌握插入排序的时间和空间复杂度。
其他说明:插入排序虽然简单但不是最优排序方法,适用于小规模数据排序或几乎有序的数据集上。通过实践编码,可以帮助理解排序算法的核心思想和具体实现过程。
冒泡排序的基本概念与C++实现方法解析
内容概要:本文档主要介绍了冒泡排序算法的概念、基本特性(如稳定性)、时间和空间复杂度,以及详细的排序思路,即通过连续多轮相邻数字之间的对比和必要时的互换来逐步形成有序序列。此外还给出了基于 C++ 编程语言的具体实现示例,有助于加深对冒泡排序机理的理解。
适合人群:对于想要了解经典排序算法——冒泡排序的技术背景人员、初学者程序员和算法爱好者来说非常适合。
使用场景及目标:①作为数据结构与算法课程的教学材料,帮助学生掌握一种简单的比较型内部排序方法;②为那些希望巩固算法基础知识的人提供实际编码经验。
阅读建议:建议先理解冒泡排序的工作原理及其效率特点再尝试运行和调整示例代码,以便更好地体会这一基础而重要的排序算法的实际应用场景和局限性。
贪心
局部最优策略能导致全局最优
while(朝总目标前进){
求局部最优;
}
求解全局最优。
例:
#include<bits/stdc++.h>
using namespace std;
int n, m;
int people[100000];
int water[1000];
int main() {
cin >> n >> m;
for (int i = 0; i < n; ++i) {
cin >> people[i];
}
for (int i = 0; i < m; ++i) {
water[i] = people[i];
}
for (int i = m; i < n; ++i) {
sort(water, water + m);
water[0] += people[i];
}
sort(water, water + m);
cout << water[m - 1];
return 0;
}
(cspoj2310: 接水问题)