C++十大经典算法案例

文章目录

    • 1. **排序算法**:
    • 2. **搜索算法**:
    • 3. **图算法**:
    • 4. **动态规划**:
    • 5. **贪心算法**:
    • 6. **树与图算法**:
    • 7. **字符串处理算法**:
    • 8. **位运算算法**:
    • 9. **数学相关算法**:
    • 10. **数据结构算法**:

1. 排序算法

  • 冒泡排序:
    void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; ++i)for (int j = 0; j < n - i - 1; ++j)if (arr[j] > arr[j + 1]) swap(arr[j], arr[j + 1]);
    }
    
  • 快速排序:
    int partition(int arr[], int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {if (arr[j] < pivot) {i++;swap(&arr[i], &arr[j]);}}swap(&arr[i + 1], &arr[high]);return (i + 1);
    }void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
    }
    

2. 搜索算法

  • 二分查找:
    int binarySearch(int arr[], int l, int r, int x) {if (r >= l) {int mid = l + (r - l) / 2;if (arr[mid] == x) return mid;if (arr[mid] > x) return binarySearch(arr, l, mid - 1, x);return binarySearch(arr, mid + 1, r, x);}return -1;
    }
    

3. 图算法

  • Dijkstra最短路径算法(仅核心逻辑):
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    vector<int> dist(n, INT_MAX); // 初始化距离数组
    dist[src] = 0;
    pq.push({0, src}); // 将源点加入优先队列while (!pq.empty()) {int u = pq.top().second;pq.pop();for (auto& edge : adj[u]) {int v = edge.first;int weight = edge.second;if (dist[v] > dist[u] + weight) {dist[v] = dist[u] + weight;pq.push({dist[v], v});}}
    }
    

4. 动态规划

  • 最长公共子序列(LCS):
    string lcs(string X, string Y, int m, int n) {int L[m + 1][n + 1];for (int i = 0; i <= m; i++) {for (int j = 0; j <= n; j++) {if (i == 0 || j == 0)L[i][j] = 0;else if (X[i - 1] == Y[j - 1])L[i][j] = L[i - 1][j - 1] + 1;elseL[i][j] = max(L[i - 1][j], L[i][j - 1]);}}// 回溯构造LCS字符串,此处省略...return lcsString;
    }
    

5. 贪心算法

  • 活动选择问题(假设每个活动有开始和结束时间):
    vector<int> findMaxActivities(vector<pair<int, int>>& activities) {sort(activities.begin(), activities.end());vector<int> result;int end = activities[0].first;for (int i = 1; i < activities.size(); ++i) {if (activities[i].first >= end) {result.push_back(i);end = activities[i].second;}}return result;
    }
    

当然,接下来再介绍几个其他的经典算法:

6. 树与图算法

  • 二叉树的前序遍历(递归实现):
    struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };void preorderTraversal(TreeNode* root) {if (root == NULL) return;cout << root->val << " ";preorderTraversal(root->left);preorderTraversal(root->right);
    }
    

7. 字符串处理算法

  • KMP算法匹配子串:
    void computeLPSArray(string pat, int M, vector<int>& lps) {int len = 0;lps[0] = 0;int i = 1;while (i < M) {if (pat[i] == pat[len]) {len++;lps[i] = len;i++;} else {if (len != 0) {len = lps[len-1];} else {lps[i] = 0;i++;}}}
    }int KMPSearch(string pat, string txt) {int M = pat.length();int N = txt.length();vector<int> lps(M);computeLPSArray(pat, M, lps);int i = 0, j = 0;while (i < N) {if (pat[j] == txt[i]) {i++;j++;}if (j == M) {return i - j; // 返回匹配到的位置} else if (i < N && pat[j] != txt[i]) {if (j != 0)j = lps[j-1];elsei = i + 1;}}return -1; // 如果未找到返回-1
    }
    

8. 位运算算法

  • 判断一个整数是否为2的幂:
    bool isPowerOfTwo(int n) {return n > 0 && (n & (n - 1)) == 0;
    }
    

9. 数学相关算法

  • 计算斐波那契数列:
    long long fibonacci(int n) {if (n <= 1) return n;long long fib[n+2]; fib[0] = 0;fib[1] = 1;for (int i=2; i<=n; i++)fib[i] = fib[i-1] + fib[i-2];return fib[n];
    }
    

10. 数据结构算法

- 链表反转:```cppstruct Node {int data;Node* next;Node(int x) : data(x), next(NULL) {}};Node* reverseList(Node* head) {Node* prev = NULL;Node* current = head;Node* next;while (current != NULL) {next = current->next;current->next = prev;prev = current;current = next;}head = prev;return head;}```

以上就是一些经典的C++算法案例,涵盖多个不同的领域和应用场景。在实际编程中,根据具体需求灵活运用这些算法能有效提高程序性能和解决问题的效率。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2814840.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现OutOfMemoryError。产生该错误的原因主要包括&#xff1a;JVM内存过小。程序不严密&#xff0c;产生了过多的垃圾。 程序体现: 内…

C语言:字符函数 字符串函数 内存函数

C语言&#xff1a;字符函数 & 字符串函数 & 内存函数 字符函数字符分类函数字符转换函数tolowertoupper 字符串函数strlenstrcpystrcatstrcmpstrstrstrtok 内存函数memcpymemmovememsetmemcmp 字符函数 顾名思义&#xff0c;字符函数就是作用于字符的函数&#xff0c;…

搜索算法(算法竞赛、蓝桥杯)--双向DFS+二分查找

1、B站视频链接&#xff1a;B26 双向DFS 送礼物_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; int n,m; int g[46];//存储所有物品的质量 int w[1<<23];//存储所有能凑出来的重量 int ans,cnt;//w的个数是cnt//搜索第u个数&#xff0c;和为s; …

揭示预处理中的秘密!(二)

目录 ​编辑 1. #运算符 2. ##运算符 3. 命名约定 4. #undef 5. 命令行定义 6. 条件编译 7. 头文件的被包含的方式 8.嵌套文件包含 9. 其他预处理指令 10. 完结散花 悟已往之不谏&#xff0c;知来者犹可追 …

几道特别难搞的数据库面试题

一、多选题(不定项选择) 在下面所列出的条目中&#xff0c;哪些是数据库管理系统的基本功能&#xff1f; A ‍‍ 数据库定义‍‍ B ‍‍ 数据库的建立和维护‍‍ C ‍‍ 数据库存取‍‍ D 数据库和其他软件系统的通信在Mongodb支持的数据类型中&#xff0c;ObjectId&#xff1…

【web APIs】3、(学习笔记)有案例!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、概念其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 二、案例举例电梯导航 前言 掌握阻止事件冒泡的方法理解事件委托的实现原理 一、概念…

设计模式七:责任链模式

文章目录 1、责任链模式2、spring中的责任链模式Spring InterceptorServlet FilterNetty 1、责任链模式 责任链模式为请求创建了一个接收者对象的链&#xff0c;在这种模式下&#xff0c;通常每个节点都包含对另一个节点者的引用。每个节点针对请求&#xff0c;处理自己感兴趣…

鸿蒙应用成企业布局新方向 鸿蒙人才成开年之后“香饽饽”

随着春节假期的结束&#xff0c;职场人也开始返工返岗。与此同时2024年春招季也已拉开帷幕。2月23日&#xff0c;据智联招聘发布的《2024年春招市场行情周报》&#xff08;第一期&#xff09;显示&#xff0c;2024年春节后第一周&#xff0c;依托消费需求释放与制造业返工复产&…

pv、pvc

目录 1、什么是pv和pvc 2、pvc的使用逻辑 3、StorageClass 4、pv和pvc相互作用 5、pv的生命周期中&#xff0c;一般有几种状态&#xff1f; 6、一个pv从创建到销毁的流程 7、nfs使用pv和pvc 7.1、配置nfs存储 7.2这里定义5个PV&#xff0c;并且定义挂载的路径以及访问…

成都规模最大的直播基地为数字经济时代注入新的活力

直播行业近年来在全球范围内迅速崛起&#xff0c;成为了数字经济时代的新业态。作为中国西南地区的中心城市&#xff0c;成都紧跟时代步伐&#xff0c;积极布局直播产业&#xff0c;以成都直播基地为载体&#xff0c;引领直播行业健康、多元发展。 天府锋巢直播产业基地作为成都…

Android和Linux的开发差异

最近开始投入Android的怀抱。说来惭愧&#xff0c;08年就听说这东西&#xff0c;当时也有同事投入去看&#xff0c;因为恶心Java&#xff0c;始终对这玩意无感&#xff0c;没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业&#xff0c;所以只能回过头又来学。 首先还是…

预付费远传水表管理系统

预付费远传水表管理系统是一种为水表计量和管理而设计的先进系统&#xff0c;结合了预付费和远传智能化技术&#xff0c;为用户和水务部门提供了更便捷、高效的水表管理解决方案。通过这种系统&#xff0c;用户能够根据自身需求预付水费&#xff0c;同时水务部门也能实现对水表…

Java 小项目开发日记 01(注册接口的开发)

Java 小项目开发日记 01&#xff08;注册接口的开发&#xff09; 1.项目需求 完成注册接口 2.项目目录 3. 配置文件&#xff08;pom.xml&#xff09; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

Apache Bench(ab )压力测试

目录 参数说明示例1&#xff1a;压力测试示例2&#xff1a;测试post接口post数据文件该如何编写&#xff1f; apr_pollset_poll: The timeout specified has expired (70007)apr_socket_recv: Connection reset by peer (104)参考 参数说明 官方文档参考这里。 ab -c 100 -n …

基础!!!吴恩达deeplearning.ai:神经网络中使用softmax

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai 文章目录 softmax作为输出层的神经网络Tensorflow的实现softmax的改进实现数值舍入误差(Numerical Roundoff Errors)sigmoid修改修改softmax 在上一篇博客中我们了解了有关softmax的原理相关内容…

【mysql版本修改】

1、使用telnet确认当前mysql版本号 telnet <MySQL服务器IP地址> <MySQL端口号> telnet 192.168.38.20 33062、使用strings查看/usr/sbin/mysqld中包含版本号的字符串 # 查看/usr/sbin/mysqld文件中是否包含对应的版本号 strings /usr/sbin/mysqld | grep 5.7.30 …

11. Informer 机制总结

Informer 机制 在 Kubernetes 系统中&#xff0c;组件之间通过 HTTP 协议进行通信&#xff0c;在不依赖任何中间件的情况下需要保证消息的实时性、可靠性、顺序性等。那么 Kubernetes 是如何做到的呢&#xff1f;答案就是 Informer 机制。Kubernetes 的其他组件都是通过 clien…

python|闲谈2048小游戏和数组的旋转及翻转和转置

目录 2048 生成数组 n阶方阵 方阵旋转 顺时针旋转 逆时针旋转 mxn矩阵 矩阵旋转 测试代码 测试结果 翻转和转置 2048 《2048》是一款比较流行​的数字游戏​&#xff0c;最早于2014年3月20日发行。原版2048由Gabriele Cirulli首先在GitHub上发布&#xff0c;后被移…

华为手动ipv6-to-ipv4隧道

中间r2的两个接口配置两个地址就行了&#xff0c;其它什么都不用配置 两边出接口R1和R3手动隧道建立&#xff1a;先把IPV4打通&#xff0c;并配置默认路由 再起隧道接口上进行配置&#xff0c;再配置带隧道的默认路由 PC上和上联接口网关只有IPV6地址 最终两个PC可以ping通 …

node 之 http模块

1.什么是http模块 在网络节点中&#xff0c;负责消费资源的电脑叫做客户端&#xff1b;负责对外提供网络资源的电脑&#xff0c;叫做服务器 http模块是node.js官方提供的&#xff0c;用来创建web服务器的模块&#xff0c;通过http模块提供的http.createServer()方法&#xff0c…