C++的一些经典算法
以下是C++的一些经典算法:
一、排序算法
- 冒泡排序(Bubble Sort)
- 原理:
- 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
- 示例代码:
- 原理:
#include <iostream>
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]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}
int main() {int arr[] = {5, 4, 3, 2, 1};int n = sizeof(arr)/sizeof(arr[0]);bubbleSort(arr, n);for (int i = 0; i < n; i++) {std::cout << arr[i] << " ";}return 0;
}
- 快速排序(Quick Sort)
- 原理:
- 它采用了分治的策略。首先选择一个基准元素,通常是数组的第一个元素。然后将数组分为两部分,小于基准的元素放在左边,大于基准的元素放在右边。接着对左右两部分分别进行快速排序,直到整个数组有序。
- 示例代码:
- 原理:
#include <iostream>
int partition(int arr[], int low, int high) {int pivot = arr[low];int i = low - 1, j = high + 1;while (true) {do {i++;} while (arr[i] < pivot);do {j--;} while (arr[j] > pivot);if (i >= j) return j;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}
void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr[], low, high);quickSort(arr, low, pi);quickSort(arr, pi + 1, high);}
}
int main() {int arr[] = {5, 4, 3, 2, 1};int n = sizeof(arr)/sizeof(arr[0]);quickSort(arr, 0, n - 1);for (int i = 0; i < n; i++) {std::cout << arr[i] << " ";}return 0;
}
- 归并排序(Merge Sort)
- 原理:
- 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。它将一个数组分成两个子数组,对每个子数组进行排序,然后将排序好的子数组合并成一个最终的排序数组。
- 示例代码:
- 原理:
#include <iostream>
void merge(int arr[], int l, int m, int r) {int n1 = m - l + 1;int n2 = r - m;int L[n1], R[n2];for (int i = 0; i < n1; i++)L[i] = arr[l + i];for (int j = 0; j < n2; j++)R[j] = arr[m + 1 + j];int i = 0, j = 0, k = l;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k] = L[i];i++;} else {arr[k] = R[j];j++;}k++;}while (i < n1) {arr[k] = L[i];i++;k++;}while (j < n2) {arr[k] = R[j];j++;k++;}
}
void mergeSort(int arr[], int l, int r) {if (l < r) {int m = l+(r - l)/2;mergeSort(arr, l, m);mergeSort(arr, m + 1, r);merge(arr, l, m, r);}
}
int main() {int arr[] = {5, 4, 3, 2, 1};int n = sizeof(arr)/sizeof(arr[0]);mergeSort(arr, 0, n - 1);for (int i = 0; i < n; i++) {std::cout << arr[i] << " ";}return 0;
}
二、搜索算法
- 线性搜索(Linear Search)
- 原理:
- 线性搜索是一种简单的搜索算法,它从数组的第一个元素开始,逐个检查每个元素,直到找到目标元素或者遍历完整个数组。
- 示例代码:
- 原理:
#include <iostream>
int linearSearch(int arr[], int n, int key) {for (int i = 0; i < n; i++) {if (arr[i] == key)return i;}return -1;
}
int main() {int arr[] = {1, 3, 5, 7, 9};int n = sizeof(arr)/sizeof(arr[0]);int key = 5;int result = linearSearch(arr, n, key);if (result == -1)std::cout << "元素未找到";elsestd::cout << "元素在索引 " << result << " 处找到";return 0;
}
- 二分搜索(Binary Search)
- 原理:
- 二分搜索要求数组是有序的。它首先比较目标元素和数组中间元素的大小。如果目标元素等于中间元素,则返回中间元素的索引。如果目标元素小于中间元素,则在数组的左半部分继续搜索;如果目标元素大于中间元素,则在数组的右半部分继续搜索。这个过程不断重复,直到找到目标元素或者确定目标元素不存在。
- 示例代码:
- 原理:
#include <iostream>
int binarySearch(int arr[], int l, int r, int key) {while (l <= r) {int mid = l+(r - l)/2;if (arr[mid] == key)return mid;else if (arr[mid] < key)l = mid + 1;elser = mid - 1;}return -1;
}
int main() {int arr[] = {1, 3, 5, 7, 9};int n = sizeof(arr)/sizeof(arr[0]);int key = 5;int result = binarySearch(arr, 0, n - 1, key);if (result == -1)std::cout << "元素未找到";elsestd::cout << "元素在索引 " << result << " 处找到";return 0;
}
三、图算法
- 广度优先搜索(Breadth - First Search,BFS)
- 原理:
- 广度优先搜索是一种用于遍历或搜索图(或树)的算法。它从给定的起始顶点开始,首先访问起始顶点的所有邻接顶点,然后再访问这些邻接顶点的邻接顶点,以此类推,直到遍历完整个图或者找到目标顶点。通常使用队列来实现。
- 示例代码(以简单的图表示为例):
- 原理:
#include <iostream>
#include <queue>
#include <vector>
void bfs(std::vector<std::vector<int>>& graph, int start) {int n = graph.size();std::vector<bool> visited(n, false);std::queue<int> q;visited[start] = true;q.push(start);while (!q.empty()) {int vertex = q.front();q.pop();std::cout << vertex << " ";for (int neighbor : graph[vertex]) {if (!visited[neighbor]) {visited[neighbor] = true;q.push(neighbor);}}}
}
int main() {std::vector<std::vector<int>> graph = {{1, 2},{0, 3, 4},{0, 4},{1},{1, 2}};bfs(graph, 0);return 0;
}
编程是一场与自我之间的战斗,也是一场与世界之间的战斗。
相关文章:
C++的一些经典算法
以下是C的一些经典算法: 一、排序算法 冒泡排序(Bubble Sort) 原理: 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…...
LNMP和Discuz论坛
文章目录 LNMP和Discuz论坛1 LNMP搭建1.1 编译安装nginx服务1.1.1 编译安装1.1.2 添加到系统服务 1.2 编译安装MySQL服务1.2.1 准备工作1.2.2 编辑配置文件1.2.3 设置路径环境变量1.2.4 数据库初始化1.2.5 添加mysqld系统服务1.2.6 修改mysql的登录密码 1.3 编译安装PHP服务1.3…...
华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的SGD优化器案例实现
SGD优化器基本原理讲解 随机梯度下降(SGD)是一种迭代方法,其背后基本思想最早可以追溯到1950年代的Robbins-Monro算法,用于优化可微分目标函数。 它可以被视为梯度下降优化的随机近似,因为它用实际梯度(从…...
μC/OS-Ⅱ源码学习(3)---事件模型
快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) 本文开始,进入事件源码的学习。 事件模型 在一个多任务系统里,各个任务在系统的统筹下相继执行,由于执行速度极快&a…...
UnityShaderLab 实现黑白着色器效果
实现思路:取屏幕像素的RGB值,将三个通道的值相加,除以一个大于值使颜色值在0-1内,再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现: ShaderLab实现: Shader "Bl…...
【Linux】文件管理必备知识和基本指令
【Linux】文件管理必备知识和基本指令 什么是操作系统什么是文件什么是路径01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令(重要):06.rmdir指令 && rm 指令(重要):rmdir指令rm指令 0…...
移远EC200A-CN的OPENCPU使用GO开发嵌入式程序TBOX
演示地址: http://134.175.123.194:8811 admin admin 演示视频: https://www.bilibili.com/video/BV196q2YQEDP 主要功能 WatchDog 1. 守护进程 2. OTA远程升级 TBOX 1. 数据采集、数据可视化、数据上报(内置Modbus TCP/RTU/ASCII,GPS协…...
CSS 浮动定位
浮动定位 float : 浮动定位 left 左浮动right 右浮动 clear : 清除浮动 leftrightboth 浮动定位会导致 元素脱离正常文档流 、 对应的 父 元素 也可能会产生 高度坍塌 。 解决 父元素 高度坍塌的方案有: 1) 父元素 添加 overflow , 值 为 除 visible 之…...
vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案
声明 因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱 ESXI主机为192.168.20.10 VCSA为192.168.20.7,后台为192.168.20.7:5480 后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来 第一阶段…...
Android Webview 详解
一 简介 一个基于webkit引擎、展现web页面的控件 Android 4.4前:Android Webview在低版本 & 高版本采用了不同的webkit版本的内核Android 4.4后:直接使用了Chrome内核 1.1 作用 在 Android 客户端上加载h5页面在本地 与 h5页面实现交互 & 调用…...
如何使用程序查询域名whois信息?
直接使用TCP协议向WHOIS服务器的43端口发送查询请求即可返回WHOIS信息。 一些国际域名(.COM/.NET/.CC等)需要继续向各注册商的WHOIS服务服务发送查询请求来获取详细信息。 大部分New gTLD来说,服务器是“whois.nic.[后缀]”,例如.red的WHOIS服务器为whoi…...
解决view-ui-plus 中表单验证不通过问题,select 组件开启multiple模式 总是提示错误,即使不验证也提示,有值也验证失败
😉 你好呀,我是爱编程的Sherry,很高兴在这里遇见你!我是一名拥有十多年开发经验的前端工程师。这一路走来,面对困难时也曾感到迷茫,凭借不懈的努力和坚持,重新找到了前进的方向。我的人生格言是…...
复杂系统如何架构?
一张图看懂整个后端系统架构 下图展示了整个后端系统架构,包括数据库、应用服务器、API网关等,展示了它们是如何协同工作的。 一些小贴士 CDN是现代互联网架构中不可或缺的一部分,特别是对于那些需要向全球用户提供高性能和高可用性服务的网站…...
leetcode 3224. 使差值相等的最少数组改动次数
题目链接:3224. 使差值相等的最少数组改动次数 题目: 给你一个长度为 n 的整数数组 nums ,n 是偶数 ,同时给你一个整数 k 。 你可以对数组进行一些操作。每次操作中,你可以将数组中任一元素替换为 0 到 k 之间的任一…...
C# 小案例(IT资产管理系统)
开发工具:visual studio 2022 语言:C# 数据库:Sql Server 2008 页面展示 一、登录 二、主窗体 三、用户管理 四、资产管理 五、关于 Java版地址:基于若依开发物品管理系统(springbootvue)_若依物品管理系统-CSDN博客 Python版…...
React第十四节useState使用详解差异
一、useState() Hook 使用 useState视图更新用法 1、写法: import { useState } from react const [name, setName] useState(Andy)利用数组解构写法, 第一个参数是自定义的属性,用于初始化时候渲染,如上面代码,初…...
ubuntu 安装 docker详细教程
1. 准备工作 1.1系统更新 sudo apt update sudo apt upgrade -y 1.2 检查系统版本 lsb_release -a 2.安装docker 2.1. 安装依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common 2.2 添加docker 官方GPG密钥 curl -fsSL https…...
图书管理系统|Java|SSM|JSP| 前后端分离
【一】可以提供远程部署安装,包扩环境 【二】提供软件相关的安装包 【三】如果需要提供java入门资料可咨询 【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、M…...
Apache Echarts和POI
目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观…...
ubuntu下的chattts 学习8(结束):长文本的语音转换优化及总结
代码 import ChatTTS import torch import numpy as np import torchaudio import re# 设置环境变量以避免内存碎片化 import os os.environ[PYTORCH_CUDA_ALLOC_CONF] expandable_segments:True# 使用 CPU 进行计算 device torch.device(cpu)chat ChatTTS.Chat() chat.loa…...
Luckysheet 实现 excel 多人在线协同编辑(全功能实现增强版)
前言 感谢大家对 Multi person online edit(多人在线编辑器) 项目的支持,mpoe 项目使用 quill、luckysheet、canvas-editor 实现的 md、excel、word 在线协同编辑,欢迎大家Fork 代码,多多 Start哦~ Multi person online edit 多人协同编辑器…...
最新VMware Workstation Pro领先的免费桌面虚拟化软件基于 x86 的 Windows 桌面虚拟化软件下载安装保姆级教程,直接下载,持续更新
目录 说明 安装程序下载 方法一:直接下载 方法二:官网下载 安装教程 说明 这几天重装电脑,想装VMware Workstation,搜了之后才发现它竟然对个人用户免费了,一个字:爽!终于可以结束百度序列号…...
GitHub使用
太久不用GitHub发现自己又有些不会了,突发奇想为何不把每次看到的有指导意义的博客收录一下以便下次查阅呢 如何上传文件夹到GitHub上(配图详解)?_github上傳資料夾-CSDN博客 github上如何删除自己的仓库_github删除仓库-CSDN博…...
阿里云服务器Linux(centos)系统安装nginx1.20.2
阿里云服务器Linux(centos)系统安装nginx1.20.2 1.安装依赖包 一共要安装4种依赖(基于c语言) yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2.下载nginx安装包并解压安装包 nginx官网下载:http://nginx.org/en/do…...
linux 用户名密码设置
安装linux时默认的密码最小长度是5个字节,但这并不够,要把它设为8个字节。修改最短密码长度需要编辑login.defs文件#vi /etc/login.defs PASS_MAX_DAYS 99999 ##密码设置最长有效期(默认值) PASS_MIN_DAYS 0 ##密…...
MySQL是否可以配合Keepalived实现高可用
MySQL是否可以配合Keepalived实现高可用 是的,MySQL 可以配合 Keepalived 实现高可用性。通常,使用 Keepalived 与 MySQL 配合的方式主要是通过配置 虚拟IP(VIP) 来实现主从数据库的自动切换,从而保证在主数据库宕机时…...
windows下 mysql开启 binlog日志
一、查看是否开启 binlog -- 方式一 show binary logs;-- 方式二 show VARIABLES like log_bin 说明没有开启 方式一 :you are not using binary logging 方式二:log_bin off 二、编辑 my.ini 配置文件 默认安装地点位于:C:\ProgramDat…...
59. 螺旋矩阵 II
59. 螺旋矩阵 II class Solution { public:vector<vector<int>> generateMatrix(int n) {// for(int i0;i<n;i){ 这样的遍历方式不对// for(int j 0;j<n;j){// generateMatrix[i][j] // }// } //初始化矩阵vector<vector<int&…...
XML 查看器:深入理解与高效使用
XML 查看器:深入理解与高效使用 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它通过使用标签来定义数据结构,使得数据既易于人类阅读,也易于机器解析。在本文中,我们将探讨 XML 查看器的功能…...
JDBC学习
配置文件 application.yml spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/rbac?useUnicodetrue&characterEncodingutf-8&serverTimezoneUTC driver-class-name: com.mysql.jdbc.Driverrbac为我自己本地的数据库&…...
单元测试
junit5中五个方法为:Test、BeforeEach(修饰实例方法,在测试方法开始之前执行)、AfterEach(修饰实例方法,在测试方法完成之后开始执行)、BeforeAll(修饰静态static方法,在…...
24/12/9 算法笔记<强化学习> PPO,DPPO
PPO是目前非常流行的增强学习算法,OpenAI把PPO作为目前baseline算法,首选PPO,可想而知,PPO可能不是最强的,但是是最广泛的。 PPO是基于AC架构,因为AC架构有一个好处,就是解决了连续动作空间的问…...
spring boot通过连接池的方式连接时序库IotDB
1、maven依赖 <dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</artifactId><version>1.3.2</version></dependency>2、配置文件 iotdb:server:url: localhostport: 6667name: rootpwd: rootmax…...
maven多模块开发
目录 聚合 可选依赖 排除依赖 属性 打包 聚合 聚合就是将多个模块组成一个整体,进行项目构建。聚合工程(也称为多模块项目)是 Maven 的一种项目结构,它允许将一个大型项目拆分为多个较小的、更易于管理的子模块。每个子模块…...
Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https
目录 前言禁用HSTS禁止重定向到https关闭 HSTS 和设置 ssl-redirect 为 false 的区别 前言 客户请求经过ingress到服务后,默认加上了strict-transport-security,导致客户服务跨域请求失败,具体Response Headers信息如下; 分析 n…...
华为eNSP:VRRP
一、VRRP背景概述 在现代网络环境中,主机通常通过默认网关进行网络通信。当默认网关出现故障时,网络通信会中断,影响业务连续性和稳定性。为了提高网络的可靠性和冗余性,采用虚拟路由冗余协议(VRRP)是一种…...
linux 安装composer
下载composer curl -sS https://getcomposer.org/installer | php下载后设置环境变量,直接通过命令composer -v mv composer.phar /usr/local/bin/composer查看版本看是否安装成功 composer -v...
ESP32-S3模组上跑通ES8388(24)
接前一篇文章:ESP32-S3模组上跑通ES8388(23) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析完了es8388_init函数中的第8段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在components\audio_hal\driver\es8388\es8388.c中,如下: …...
类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。
类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。 这个错误表明你的项目尝试加载的 .class 文件(编译好的 Java 类)是用比你的运行环境支持更高版本的 Java 编译的。具体来说: 版本 61.0 对应 Ja…...
AI 的时代,新科技和新技术如何推动跨学科的整合?
在当前AI的发展中,我们面临的一个主要挑战就是融合的问题,这实际上不仅是技术上的融合,还有更深层次的哲学层面的思考。 或许在中国这方面的讨论较少,但在西方哲学和神学的语境中,探讨万物的根本和不同学科之间的联系…...
12.9-12.16学习周报
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract一、SNN与传统ANN的比较1.SNN概述2.SNN神经元和ANN的比较结构3.spikingjelly1.数据格式2.状态的保存和重置3.传播模式4.神经元 二、图数据库1.图数据库…...
CanFestival移植到STM32 F4芯片(基于HAL库)
本文讲述如何通过简单操作就可以把CanFestival库移植到STM32 F4芯片上,作为Slave设备。使用启明欣欣的工控板来做实验。 一 硬件连接 观察CAN报文需要专门的设备,本人从某宝上买了一个兼容PCAN的开源小板子,二十几块钱,通过USB接…...
构建安全的数据库环境:群晖NAS安装MySQL和phpMyAdmin详细步骤
文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文将详细讲解如何在群晖NAS上安装MySQL及其数据库管理…...
相机(Camera)硬件组成详解
简介:个人学习分享,如有错误,欢迎批评指正。 写在前面:可以去B站观看一些相机原理的视频来配合学习,这里推荐:推荐1,推荐2,推荐3 相机(Camera)是一种复杂的光…...
【Linux———基础IO】
每一滴眼泪,每一次心碎,什么爱能无疚无悔.......................................................................... 文章目录 前言 一、【认识文件I/O】 1.1、【回顾C语言文件I/O】 1.2、【操作系统文件I/O】 1.2.1、【open函数】 1、【open函数的三…...
WebRTC服务质量(03)- RTCP协议
一、前言: RTCP(RTP Control Protocol)是一种控制协议,与RTP(Real-time Transport Protocol)一起用于实时通信中的控制和反馈。RTCP负责监控和调节实时媒体流。通过不断交换RTCP信息,WebRTC应用…...
[python SQLAlchemy数据库操作入门]-10.性能优化:提升 SQLAlchemy 在股票数据处理中的速度
哈喽,大家好,我是木头左! 当处理大量数据时,如股票数据,默认的ORM操作可能会显得效率低下。本文将探讨如何通过一些技巧和策略来优化SQLAlchemy ORM的性能,从而提升其在股票数据处理中的速度。 1. 选择合适的数据类型 在定义模型时,选择合适的数据类型对于性能至关重要…...
23种设计模式之中介者模式
目录 1. 简介2. 代码2.1 Mediator (中介者接口)2.2 ChatRoom (具体中介者类)2.3 User (同事接口)2.4 ChatUser (具体同事类)2.5 Test (测试)2.6 运行结果 3. …...
MySQL:GROUP_CONCAT分组合并
目录 一、概述二、用法三、分组去重 一、概述 GROUP_CONCAT函数要配合group by才能发挥作用,主要用于分组之后合并某一字段。 二、用法 SELECT GROUP_CONCAT(age) FROM tb_user GROUP BY banner;三、分组去重 SELECT GROUP_CONCAT(DISTINCT age) FROM tb_user GRO…...
递归方式渲染嵌套的菜单项
1. 递归组件 递归方式渲染嵌套的菜单项,这个是非常好的做法。为了避免在每个子菜单上都渲染一个新的 <ul> 标签,可以使用 v-if 来判断是否有子菜单,再决定是否渲染子菜单的部分。 2. 提高性能 对于递归渲染组件,Vue 可能…...