- 枚举法
枚举法是一种基本的问题解决策略,它尝试所有可能的情况以找到解决方案。这种方法通常用于问题规模较小且可以接受一定时间复杂度的情况。
例子:找出三个数中最大的数
#include <iostream>
using namespace std;
int findMax(int a, int b, int c) {
return max(a, max(b, c));
}
int main() {
int x, y, z;
cin >> x >> y >> z;
cout << "最大值是: " << findMax(x, y, z) << endl;
return 0;
}
- 模拟法
模拟法是指按照实际过程或规则进行模拟以解决问题的方法。例如模拟交通信号灯的变化。
例子:简单的交通灯控制
#include <iostream>
#include <thread>
#include <chrono>
void trafficLight() {
string lights[] = {
"红", "绿", "黄"};
for (auto &light : lights) {
cout << "当前灯为:" << light << endl;
this_thread::sleep_for(chrono::seconds(5)); // 假设每个状态持续5秒
}
}
int main() {
while (true) {
trafficLight();
}
return 0;
}
- 递推算法
递推算法基于前几个元素的结果来计算后续元素,最著名的例子是斐波那契数列。
例子:计算斐波那契数列第n项
#include <iostream>
using namespace std;
long long fibonacci(int n) {
if (n <= 1) return n;
long long prev = 0, curr = 1, next;
for (int i = 2; i <= n; ++i) {
next = prev + curr;
prev = curr;
curr = next;
}
return curr;
}
int main() {
int n;
cin >> n;
cout << "Fibonacci(" << n << ") = " << fibonacci(n) << endl;
return 0;
}
- 排序算法 - 冒泡排序
冒泡排序通过重复地遍历列表,比较相邻元素并根据需要交换它们的位置,直到没有更多的交换为止。
例子:对整数数组进行排序
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n) {
bool swapped;
for (int i = 0; i < n-1; i++) {
swapped = false;
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
swap(arr[j], arr[j+1]);
swapped = true;
}
}
// 如果内循环中没有发生任何交换,则数组已经有序
if (!swapped)
break;
}
}
int main() {
int arr[] = {
64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
cout << "Sorted array: \n";
for (int i=0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
- 排序算法 - 插入排序
插入排序是一种简单直观的排序算法,它的工作原理是将未排序元素依次插入到已排序部分的正确位置。
例子:对整数数组进行插入排序
#include <iostream>
using namespace std;
// 插入排序函数
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
// 将 arr[i] 插入到已排序序列 arr[0..i-1] 的正确位置
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
int main() {
int arr[] = {
12, 11, 13, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
在 insertionSort 函数中,对于未排序部分的每个元素 arr[i],将其与已排序部分的元素进行比较,并将其插入到正确位置。我们将 arr[i] 的值存储在 key 中,然后将比 key 大的元素向右移动,直到找到 key 的正确位置。
- 排序算法 - 选择排序
选择排序的基本思想是在未排序部分中找到最小元素,并将其放到已排序部分的末尾。
例子:对整数数组进行选择排序
#include <iostream>
using namespace std;
// 选择排序函数
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int min_index = i;
// 找到未排序部分的最小元素的索引
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_index])
min_index = j;
}
// 交换最小元素和当前元素
swap(arr[i], arr[min_index]);
}
}
int main() {
int arr[] = {
64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
selectionSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
在 selectionSort 函数中,对于每个 i,我们遍历未排序部分(从 i+1 到 n-1)找到最小元素的索引 min_index,然后将该元素与 arr[i] 交换位置。
- 归并排序
归并排序是一种分治算法,将数组分成两半,对每一半进行排序,然后将排序好的两半合并在一起。
例子:对整数数组进行归并排序

&spm=1001.2101.3001.5002&articleId=145135565&d=1&t=3&u=a40b3a06ad4a4875acb17cd589d5c3c6)
620

被折叠的 条评论
为什么被折叠?



