c++算法
2026-08-19 11:08:41
发布于:浙江
一、 算法基础概念
算法是解决特定问题的一系列有限、确定且可行的指令序列。在 C++ 中,算法通常体现为对数据的处理逻辑。
算法的五大特征:
有穷性:算法必须在执行有限步骤后停止,不能陷入死循环。
确定性:每一步骤必须有精确的定义,无歧义。
可行性:每一步都必须在有限时间内完成。
输入:算法可以有零个或多个输入量值。
输出:算法必须至少有一个输出结果。
算法与程序的区别:
算法是解决问题的逻辑方法,而程序是算法在特定编程语言(如 C++)中的具体实现。
二、 常用排序算法
排序是将一组数据按照特定顺序(如升序或降序)排列的过程。以下是几种经典的 C++ 排序实现思路:
- 冒泡排序 (Bubble Sort)
原理:通过重复交换相邻的元素来排序。如果前一个数大于后一个数,则交换它们。
特点:简单直观,但效率较低,时间复杂度为
O(n2)
O(n2)。
核心逻辑:
cpp
//
void bubbleSort(int arr[], int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
std::swap(arr[j], arr[j + 1]);
}
}
}
}
// - 选择排序 (Selection Sort)
原理每次从未排序的序列中选择最小(或最大)的元素,放到已排序序列的末尾。
特点:交换次数少,但比较次数多,时间复杂度为
O(n2)
O(n2)。
核心逻辑:
cpp
//
void selectionSort(int arr[], int length) {
for (int i = 0; i < length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
std::swap(arr[i], arr[minIndex]);
}
}
// - 快速排序 (Quick Sort)
原理:基于分治算法思想。选择一个基准值(Pivot),将数组分为两部分:左侧小于等于基准值,右侧大于基准值,然后递归地对这两部分进行排序。
特点:平均效率高,时间复杂度为
O(n log n)
O(n log n),是实际应用中常用的排序算法。
核心逻辑:
选取基准值(通常选中间位置 (left + right) / 2)。
使用两个指针 i 和 j,分别从左向右找比基准大的数,从右向左找比基准小的数,找到后交换。
当 i > j 时停止,递归处理左右子区间。 - 其他常见排序
C++ 标准库及算法大全中还包含插入排序、归并排序、堆排序、希尔排序、计数排序、桶排序和基数排序等,可根据数据规模和特性选择使用。
三、 搜索算法
搜索算法用于在数据集中查找特定目标值。
线性搜索 (Linear Search):逐个检查元素,适用于未排序数据,时间复杂度
O(n)
O(n)。
二分搜索 (Binary Search):适用于已排序数组。通过不断将搜索区间减半来查找目标,时间复杂度
O(log n)
O(log n)。
其他搜索:插值搜索、斐波那契搜索等,针对特定分布的数据优化搜索效率。
四、 高精度算法 (High Precision Arithmetic)
由于 C++ 内置类型(如 int, long long, double)的范围和精度有限,处理超大整数或高精度浮点数时需要模拟人工运算。
- 高精度加法
思路:使用字符串或字符数组输入大数,将其逆序存储到整型数组中(个位在下标 0)。从低位到高位依次相加,处理进位。
关键点:
对齐个位:通常通过逆序存储自然对齐。
进位处理:sum = a[i] + b[i] + carry,当前位结果为 sum % 10,进位为 sum / 10。
注意最高位可能产生的额外进位。 - 高精度乘法与除法
乘法:模拟竖式乘法,注意位权对应关系。
除法:
高精度除以单精度:从高位到低位逐位计算商和余数。
单精度除以单精度求高精度商:先算整数部分,余数乘以 10 继续除,可保留任意位小数。 - 压位优化
思想:为了减少计算次数,可以将多位数字压缩到一个数组元素中(例如每 4 位存为一个 int,基数 base=10000)。
优势:大幅减少数组长度和循环次数,提高运算效率。
输出注意:最高位正常输出,后续低位需补零至固定宽度(如 %04d)。
五、 C++ 标准库与工程实践
在实际开发或竞赛中,合理利用 C++ 标准库可以简化算法实现。
头文件:推荐使用 <bits/stdc++.h> 包含所有标准库,或根据需要包含 <iostream>, <vector>, <algorithm> 等。
命名空间:使用 using namespace std; 避免每次调用标准库函数前加 std::。
容器与算法:
stdvector:动态数组,支持随机访问。
stdsort:标准库提供的排序函数,底层通常为内省排序(IntroSort),效率高于手写的简单排序。
std::swap:高效交换两个变量的值。
数据类型选择:
普通整数用 int。
较大整数用 long long。
高精度计算需自定义结构体或使用字符串模拟。
六、 总结
掌握 C++ 算法需要从理解基本数据结构开始,熟练运用排序和搜索等基础算法,并在面对超出原生数据类型范围的问题时,能够灵活运用高精度算法进行模拟。同时,熟悉 C++ 标准库(STL)能极大提升代码编写效率和程序性能。
全部评论 2
顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶顶 顶顶顶 顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶 顶顶顶顶顶顶 顶顶顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶 顶顶顶顶 顶顶顶顶顶 顶顶 顶顶顶顶顶 顶顶顶 顶顶顶 顶顶顶顶顶 顶顶顶顶顶顶顶顶顶顶 顶顶 顶顶 顶顶顶顶顶 顶顶顶顶顶顶顶顶顶 顶顶顶 顶顶顶顶 顶顶顶顶顶顶顶 顶顶顶 顶顶顶顶 顶顶顶顶顶顶 顶顶顶顶 顶顶顶顶 顶顶顶 顶顶顶顶顶 顶顶顶顶顶顶顶 顶顶顶顶顶顶 顶顶顶顶顶顶 顶顶顶顶顶顶 顶顶顶顶顶顶顶 顶顶顶顶顶 顶顶顶顶顶顶 顶顶顶顶顶 顶顶顶顶 顶顶顶 顶顶顶2026-08-31 来自 上海
0
2026-08-19 来自 浙江
0





























有帮助,赞一个