电机控制算法(FOC、SVPWM、电流环速度环)姿态解算(四元数、欧拉角、互补滤波、卡尔曼)控制理论基础(状态观测器、PID参数整定、前馈补偿)

FOC伺服电机控制中前馈控制方案的原理和设计方法 FOC伺服电机前馈控制原理及应用摘要:前馈控制通过"预见性补偿"提升系统性能,其核心是根据系统动力学模型提前计算控制量。在FOC伺服系统中,主要采用速度前馈(补偿粘性摩擦)和加速度前馈(补偿惯性),结合运动学模型计算出转矩指令。前馈控制能显著减小跟踪误差、提高响应速度、降低对PID的依赖,并提升系统带宽。但效果依赖于模型准确性,需结合反馈控制共同作用。实践中需通过系统辨识获取准确模型参数,并进行参数调优以获得最佳性能。 阅读详情

第一性原理的“三观”

  • 控制本质:让“实际值”听话地等于“目标值”。

  • 数学本质:微分方程(描述变化规律) + 线性代数(坐标变换) + 概率论(处理噪声)。

  • 物理本质:能量守恒(电机扭矩=电功率)、牛顿力学(F=ma)、电磁感应(动生电动势)。


第一部分:电机控制算法(FOC & SVPWM)

1.1 第一性原理(物理模型)

  • 电机为什么转? 初中物理:通电导体在磁场中受力 F = BIL(左手定则)。

  • 直流电机好控制:因为电枢磁场和永磁体磁场天然垂直(正交),扭矩 = Kt * I。

  • 交流电机(BLDC/PMSM)的痛点:定子磁场在旋转,转子也在旋转。如果直接通正弦波,磁场夹角不固定,扭矩会脉动。

  • FOC(矢量控制)的核心物理逻辑:通过算法,把旋转的交流信号“冻结”住,强行构造出一个“虚拟直流电机”模型。这样,我就能像控制直流电机一样,独立控制“励磁(D轴)”和“扭矩(Q轴)”。

1.2 关键技术点拆解(通俗版)

  • Clark变换:把三相(U,V,W)的数学投影,合并成两相静止坐标系(α,β)。(数学:等幅值变换,矩阵乘法)

  • Park变换:把静止的α,β坐标系,“乘以转子角度θ的旋转矩阵”,得到旋转坐标系(D,Q)。此时,电流变成了直流量。

  • SVPWM(空间矢量脉宽调制):逆变器只有8种开关状态(6个有效矢量+2个零矢量)。第一性原理是“伏秒平衡”——在一个开关周期内,让两个相邻有效矢量与零矢量进行组合,合成的平均效果等于我想要的任意方向的电压矢量。

    • 画图秘诀:在复平面上画一个正六边形,内切圆就是最大不失真电压圆。

1.3 代码分段思路(电流环)

(代码部分为AI生成)

c

// 阶段1:ADC采样(物理层)-> 获取三相电流 Ia, Ib, Ic (Ic = -Ia - Ib)
// 阶段2:Clarke变换(数学投影)
float I_alpha = Ia;
float I_beta = (Ia + 2*Ib) / 1.732; 

// 阶段3:Park变换(解耦,需要转子角度θ,来自编码器)
float cos_theta = cos(angle); 
float sin_theta = sin(angle);
float I_d = I_alpha * cos_theta + I_beta * sin_theta;  // 励磁分量(希望为0)
float I_q = -I_alpha * sin_theta + I_beta * cos_theta; // 扭矩分量(希望跟随目标)

// 阶段4:PID计算(PI控制器,这里就是简单的离散累加)
float V_d = PI_Controller(I_d_ref - I_d, &pid_d); 
float V_q = PI_Controller(I_q_ref - I_q, &pid_q);

// 阶段5:逆Park变换(把电压矢量从旋转坐标变回静止坐标)
float V_alpha = V_d * cos_theta - V_q * sin_theta;
float V_beta = V_d * sin_theta + V_q * cos_theta;

// 阶段6:SVPWM实现(伏秒平衡计算)
// 计算扇区,计算X,Y,Z,计算T1,T2,赋值给定时器比较寄存器
SVPWM_Generate(V_alpha, V_beta);

第二部分:姿态解算(四元数 & 滤波)

2.1 第一性原理(物理/几何模型)

  • 姿态是什么? 就是刚体在三维空间中的旋转。

  • 欧拉角的痛点(万向节死锁):想象一下你拿着手机,当俯仰角达到±90°时,横滚和偏航的旋转轴重合了,自由度丢失。数学上表现为三角函数分母为零。

  • 四元数的物理本质:它不是一个抽象数字,而是“轴-角”表示法的复数扩展。任何一个旋转,都可以理解为“绕某个空间单位向量 [x,y,z] 旋转 θ 度”。四元数 = cos(θ/2) + sin(θ/2)(xi + yj + zk)。它没有任何奇异性,适合积分。

2.2 关键技术点拆解

  • 陀螺仪(高频):测角速度。第一性原理:角度 = ∫角速度 dt。缺点:积分累积漂移(温飘)。

  • 加速度计(低频):测重力矢量。第一性原理:静止时,重力方向就是“下”。缺点:运动加速度会干扰(噪声大)。

  • 互补滤波(Complementary Filter):本质是一阶低通+高通滤波器。“短时间相信陀螺仪,长时间相信加速度计”。数学公式:角度 = 0.98(角度 + gyrodt) + 0.02*(accel_angle)。(系数和为1,保证幅频特性互补)。

  • 卡尔曼滤波(终极解法):第一性原理是“最优贝叶斯估计”。它不关心哪个传感器好哪个坏,它只关心协方差矩阵。预测(根据物理模型推一步)-> 更新(根据测量值修正一步)。如果陀螺仪方差小,K增益就小,更信陀螺仪;反之则更信加速度计。

2.3 代码分段思路(姿态更新)

(代码部分为AI生成)

c

// 阶段1:传感器读取(物理层)
gyro = Read_Gyro(); // rad/s
accel = Read_Accel(); // m/s^2

// 阶段2:加速度计求姿态(提供绝对参考,仅适用于静止/低速)
// 利用重力在三个轴的分量,反推横滚和俯仰(atan2函数)
float roll_acc = atan2(accel.y, accel.z);
float pitch_acc = atan2(-accel.x, sqrt(accel.y*accel.y + accel.z*accel.z));

// 阶段3:四元数微分方程更新(核心:一阶龙格-库塔法)
// 物理:q_dot = 0.5 * q ⊗ ω (四元数乘法)
quaternion q_new = q_old + 0.5 * dt * (q_old ⊗ gyro);

// 阶段4:利用加速度计修正(互补滤波在四元数层面的实现)
// 计算理论重力方向 vs 实测重力方向,做叉积得到误差
float error = cross_product(gravity_predicted, gravity_measured);
// 将误差通过PI控制器补偿到陀螺仪角速度上(消除漂移)
gyro_corrected = gyro + Kp * error + Ki * sum_error;

// 阶段5:归一化(数学上保证四元数模长为1,防止病态矩阵)
q_new = normalize(q_new);

// 阶段6:输出欧拉角(如果需要给位置环用)
float yaw = atan2(2*(q.w*q.z + q.x*q.y), 1 - 2*(q.y*q.y + q.z*q.z));

第三部分:控制理论基础(观测器 & 前馈 & PID)

3.1 第一性原理(数学/动力学模型)

  • PID:

    • P(比例):“现在”。误差越大,打得越狠。物理学本质:弹簧力 F = kx。

    • I(积分):“过去”。消除静差。物理学本质:累加器,对抗恒定重力负载。

    • D(微分):“未来”。预测趋势,抑制震荡。物理学本质:阻尼器 F = c*v(速度越快,阻力越大)。

  • 前馈补偿(Feedforward):

    • 第一性原理:开环预测。PID是“出了错再改”,前馈是“我预判了你的预判”。

    • 实例:电机要克服重力举起10kg物体。如果等PID看到位置误差再加大电流,反应慢且会超调。正确的物理做法:根据动力学方程 扭矩 = 重力矩 + 惯性矩,直接把基础电流算好给出去,PID只需要补偿剩下的5%外部扰动即可。

  • 状态观测器(Luenberger Observer / Kalman Filter):

    • 第一性原理:“软传感器”。有些物理量测不准或者太贵(比如速度微分噪声大)。

    • 逻辑:建立一个数学模型(如:位置 = 上次位置 + 速度*dt)。利用模型算出“估计位置”,利用传感器测出“实际位置”。两者做差,乘以一个增益(观测器增益),把误差反馈给模型中的“速度”,让估计速度无限逼近真实速度。

3.2 代码分段思路(位置-速度-电流三环串级)

(代码部分为AI生成)

c

// 阶段1:前馈计算(基于物理模型:牛顿第二定律)
// 目标加速度 = (Speed_cmd - Speed_last) / dt
float Torque_feedforward = Inertia * Target_Acceleration + Gravity_Compensation;

// 阶段2:位置环(P控制)-> 生成速度目标
float speed_target = Kp_pos * (pos_target - pos_feedback);
// 限制最大速度(防飞车)
speed_target = saturate(speed_target, MAX_SPEED);

// 阶段3:速度环(PI + 前馈)-> 生成扭矩目标(即电流环的Iq_ref)
float speed_error = speed_target - speed_feedback;
float torque_pid = Kp_speed * speed_error + Ki_speed * integral_speed_error;
float torque_total = torque_pid + Torque_feedforward; // 前馈叠加!
float i_q_target = torque_total / (Kt * 磁场系数); // 转换为电流

// 阶段4:电流环(PI高速执行,通常几十KHz)执行第一部分讲的FOC。
FOC_Update(i_q_target, 0); // Id=0控制

// 阶段5:(进阶)状态观测器估算速度,以替代微分器
// 建立状态方程 x(k+1) = A*x(k) + B*u(k)
// 位置_est(k+1) = 位置_est(k) + 速度_est(k)*dt + 0.5*加速度*dt^2
// 速度_est(k+1) = 速度_est(k) + 加速度*dt
// 误差 = 编码器位置 - 位置_est
// 速度_est = 速度_est + L * 误差  (L即为观测器增益)
float velocity_estimated = Observer_Update(encoder_pos, current_cmd);

第四部分:给小白的三条“打通任督二脉”实用建议

工程落地建议:

建议一:务必记住“采样时间(Ts)”是最重要的“物理常量”

  • 第一性原理:离散控制是数字世界的积分器。

  • 坑:把DSP的定时器中断频率设成10kHz,但电流环PID的积分项累加却放在1kHz的主循环里。

  • 对策:所有积分项 integral += error * Ts,这个 Ts 必须精确对应中断时间。写代码时,把 Ts 作为一个全局常量,且每次中断触发时,利用定时器捕获计数值计算真实 dt,用以补偿中断响应延迟。

建议二:参数整定的“倒序法”和“临界比例度法”

  • 错误做法:上来就调位置环P,结果震荡爆炸。

  • 正确物理顺序(由内向外):电流环(最内层)-> 速度环 -> 位置环(最外层)。内环没调好,外环不可能好。

  • 实操:

    1. 先给电流环(Iq)一个阶跃信号,只调P,直到电流波形上升沿不震荡(阻尼比≈0.707)。

    2. 速度环只用P,给目标速度,增大P直到等幅震荡,记录震荡周期 Tc 和增益 Kc。

    3. 根据齐格勒-尼科尔斯表格,Kp = 0.45*Kc,Ki = 0.54*Kc/Tc。这个公式来源于经典控制理论的根轨迹法,绝不是瞎猜。

建议三:离散化的“双线性变换(Tustin)”

  • 第一性原理:模拟域的积分器 1/s 在数字域不能直接用 T/(z-1)(前向欧拉),因为系统会不稳定(把左半平面的极点映射到单位圆外)。

  • 必杀技代码写法:对于积分项,用 增量式PID 或 后向欧拉。

  • (代码部分为AI生成)

  • c

  • // 积分限幅(Anti-windup)必须加!
    integral += error * Ts;
    if (integral > MAX) integral = MAX;
    if (integral < -MAX) integral = -MAX;

建议四:工作中遇到“震荡”,先查“相位延迟”

  • 姿态解算为什么飘?检查四元数更新时,陀螺仪数据是否经过了低通滤波(低通会带来相位滞后)。

  • FOC为什么高速没力?检查SVPWM的过调制区,当电压矢量进入六边形边界时,需要做“最小相位误差”处理,否则电压饱和会引起电流环震荡。


最后的最后(终极实战心法)

“不要试图一次性写出完美的卡尔曼滤波或FOC。第一性原理在代码中体现为‘分模块验证’。

  1. 先点灯测中断频率(确保Ts准确)。

  2. 开环给SVPWM看电机能不能转(验证硬件和坐标变换方向,方向错了,闭环就是正反馈!)。

  3. 锁住转子,测电流环的阶跃响应(验证PI正反)。

  4. 最后,永远要加安全保护(过流、过压、过热),因为再完美的算法也扛不住物理世界的短路。

秦时明月汉时关,万里长征人未还。——《出塞》·王昌龄

直流母线电压纹波补偿:SVPWM前馈算法原理与工程实践 在电机控制与电力电子系统中,脉宽调制(PWM)技术是实现高效能量转换的核心。其原理是通过控制功率开关器件的通断,将直流电转换为特定频率和幅值的交流电。然而,直流母线电压的波动会直接影响PWM输出电压的精度,导致电机转矩脉动、系统效率下降和性能不稳定,这在伺服驱动、电动汽车等高精度应用场景中尤为关键。为解决这一问题,前馈补偿技术应运而生,它通过实时测量母线电压并动态调整调制指令,从源头抵消纹波影响。空间矢量调制(SVPWM)作为广泛应用的高效调制策略,其补偿算法需精确处理调制指数与电压基准。本文以经典的`sv 阅读详情

相关推荐

嵌入式硬件工程师成长之路·2026(2):电阻与电容选型实战清单——常温能过、高温就漂的 6 个参数

常温测试全绿,45℃ 老化 8 小时就有 3 台采样点漂了 300mV?先别换料。本文按排查顺序拆解:热风枪定位、TCR 误差预算算出温漂只占 22mV,真凶是 X5R 电容的直流偏压衰减。附电阻封装、电容介质、降额系数三张对照表和 5 条避坑清单,单台 9 分钱修完。

云轩阁 239

FOC电流环PID参数自整定方法(TI)

最近参阅TI的用户手册中记录有关于电流环Kp,Ki参数计算的方法,在此作出小结以防忘记。 上图为PID的串联拓扑结构图,Kp 项用于设定控制环路的高频增益,Ki 项用于设定低频增益,理论上DC 增益无限制。界定高频与低频的频率被称为控制器“零点”,它对应于频率图的拐点。我们令: 用于设定所有频率的增益,而直接定义控制器拐点(零点),单位为rad/s。 通过PID表达式可推导出...

Wolf的专栏 3万+

5个4000比特大状态置换算法的设计与分析

下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。

HuangJinLong2的博客 337

FOC专题--环路PID算法拆分分析

foc算法中的环路PID,积分限幅,积分抗饱和

Anitawen的博客 3854

压电阀控制器设计-总章

本文章用于回顾记录本人制作压电阀控制器的关键技术,本人所制作压电阀控制器已经上市得到应用,特在此对一些关键技术进行回顾记录,欢迎从事压电控制及压电阀相关人员一起讨论

qq_42712859的博客 849

鸿蒙之HML语法参考

HML(HarmonyOS Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、条件渲染和逻辑控制等高级能力。

2401_82772199的博客 1648

⚡ 一文搞懂 FOC + SVPWM + 串级 PID 电机控制

该文系统介绍了PID控制原理及实现方法,主要内容包括:1. PID控制基本原理,由比例、积分、微分三部分组成;2. PID初始化函数PID_Init()的参数设置及限幅作用;3. 单环PID计算函数PID_SingleCalc()的工作流程;4. 串级PID控制函数PID_CascadeCalc()的结构与优势;5. 实用的PID调参技巧和应用场景。文章通过代码解析详细说明了位置环和速度环的双环控制实现,特别适用于电机伺服系统,并强调限幅保护对系统稳定的重要性。整体内容清晰完整,为嵌入式控制系统开发提供了实

weixin_73601115的博客 1113

电子货架标签应用浅析(ESL)

​【 关注与分享,是对原创最大的鼓励 】 年底了,会断续介绍几个主要的BLE的应用及市场情况,这篇文章介绍的是电子货架标签, ESL (Electronic Shelf Label)。 文章将从应用简介,市场规模,产业链,头部玩家及系统框架进行介绍。只对技术感兴趣的可以直接拉到底。 ESL简介 ESL,是一种显示产品,其主要是替代传统的纸质标签,应用于大型商超,...

iotthings的博客 4691

【电机控制】FOC算法验证步骤——电流环PI参数、速度环PI参数

【电机控制】直流有刷电机、无刷电机汇总——持续更新使用工具:1.直流稳压电源:GPS305D(30V/5A)2.上位机:VOFA+3.示波器:PICO2205A4.电桥LCR:VICIOR4090A5.电流钳:汉泰CC65提示:以下是本篇文章正文内容,下面案例可供参考本文仅仅简单介绍了【电机控制】FOC算法验证步骤——电流环PI参数、速度环PI参数,评论区欢迎讨论。

qq_42681425的博客 4137

视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)

最详细的代码调试运行避坑说明,也包含了我自己对代码的理解,如有理解错误的地方,欢迎指正交流。

记录和分享 1万+

ParaView: 从 2 或 3 个标量创建向量

ParaView: 从 2 或 3 个标量创建向量

希望我的博客,能帮上你解决学习中工作中所遇到的问题 583

从FOC算法到姿态同步:无刷电机云台控制系统全解析

无刷电机控制是现代机器人、无人机和智能云台等精密运动系统的核心技术,其核心在于实现高精度、高效率的转矩与位置控制。磁场定向控制(FOC)算法通过坐标变换,将三相交流电机的控制解耦为独立的转矩与励磁分量,实现了类似直流电机的线性控制特性,从而显著提升了系统的动态响应与低速平稳性。这一技术价值在于为高精度伺服控制奠定了算法基础,广泛应用于需要快速响应和精准定位的场景,如工业机械臂、相机稳定云台和航空航天设备。本文聚焦于无刷电机云台这一综合性应用,深入剖析了从三相半桥驱动硬件设计到FOC软件实现,再到姿态融合与同

weixin_33923762的博客 324

Python爬虫实战:如何抓取旅游论坛上的帖子、旅行攻略和评论内容

无论是知名的旅游网站,还是地方性的旅游讨论区,用户发布的旅行贴文、攻略和评论往往包含着大量的宝贵信息。本文将详细介绍如何使用Python编写一个爬虫,抓取旅游论坛上的帖子、旅行攻略和评论内容,涵盖从获取页面内容、解析数据到处理动态加载等各个方面的技术。从基本的请求和网页解析,到动态加载页面的处理,再到数据存储和反爬虫技巧,我们详细讲解了抓取旅游论坛数据的全过程。通过本文的介绍,你可以将所学的爬虫技术应用到其他类似的网站抓取任务中,为后续的数据分析、机器学习等任务提供丰富的数据源。在这种情况下,传统的。

2201_76125261的博客 1557

【电机控制】永磁同步电机FOC控制—电流环PI参数整定

永磁同步电机FOC控制电流环PI参数整定方法:设置特殊的PI参数,通过零极点相消的方法使得电流开环传递函数成为一个纯积分环节,经过闭环后的闭环传递函数是一个典型的一阶惯性环节的传递函数形式,它能够平稳地响应输入变化,并且最终趋于一个稳定的值。

liuxiaofeng的博客 1万+

MATLAB与ROS联合仿真——控制类功能模块介绍

MATLAB与ROS联合仿真——控制类功能模块介绍

慕羽★的博客 2352

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

FOC学习笔记 —— PID参数

在电机控制系统中,正确的电机参数配置和高效的数据结构设计对于控制精度和系统性能至关重要。电机参数包括电流、速度、位置、转子角度等,它们在 FOC(磁场定向控制) 系统中扮演着核心角色。在电机控制系统中,电机参数的组织方式通过数据结构来实现。本篇文章将详细介绍电机运行参数的组织方式、关键控制参数的配置,并深入探讨如何通过调整这些参数来优化电机控制系统的性能。在 motor_structure.h 文件中,我们定义了电机运行所需的核心数据结构。电机参数的结构体将所有重要的参数组织在一起,方便管理和传递。

Will_W_56_J的博客 2227

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

FOC电机控制:SVPWM实现与调试技巧

本文介绍了FOC电机控制的核心算法实现与调试技巧。重点包括:1)SVPWM算法实现,将α-β坐标系电压转换为三相占空比;2)Clarke/Park变换及其逆变换的代码实现;3)离散PID控制器设计。调试技巧方面,强调电流采样与PWM中心对齐、编码器信号滤波处理,建议采用开环到闭环的渐进调试方法,并提供了参数整定顺序建议(电流环带宽设为开关频率1/10,速度环为电流环1/10)。文中还给出了移动平均滤波等实用代码实现。

liuf2018的博客 420

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

FOC电流环PID参数自整定

本文部分内容参考帖子:https://e2echina.ti.com/question_answer/microcontrollers/c2000/f/56/t/109265#

Lucky_JIE_AK的博客 4894

SimpleFOC调参3-PID参数整定攻略

FOC作为直流无刷电机控制最常用的算法,得到广泛应用。simpleFOC,ODrive,VESC等。其中simpleFOC因其简单易用,支持多种硬件平台,很适合新手入门。我在用simpleFOC的过程中踩了不少坑,在此记录学习调试过程中的一些心得。硬件平台开始最好直接购买套件,熟悉后再自己搭配,我这里直接买的灯哥开源的套件电机2204驱动器L6234磁编码器AS5600电流检测INA240主控MCUESP32软件平台IDE工具PlatforIO,......

sinat_22081411的博客 1万+

千次静电放电试炼,守住飞凌嵌入式硬件可靠底线

ESD(Electro-Static Discharge,静电放电)是指具有不同静电电位的物体相互靠近或直接接触时引起的电荷转移。它是一种常见的近场危害源:放电瞬间会形成高电压、强电场、瞬时大电流,并伴有强电磁辐射,构成静电放电电磁脉冲。在飞凌嵌入式的实验室里,静电放电模拟器每一次触发,都是对产品硬件可靠性的严格把关。严苛的静电放电抗扰度试验,还原了真实使用场景中最难防范的瞬间,构成了产品从理想环境走向复杂现场前的关键验证。

飞凌嵌入式 196

嵌入式硬件知识-电阻串联、并联核心特性

本章详细讲解电阻串联、并联核心特性

李永奉的博客 309

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 12

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 436

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 359

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 77
上一篇: 增强现实20个核心跟踪算法技术
下一篇: 计算机图形学20个核心渲染技术
CYY1921
博客等级 码龄1年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CYY1921

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值