十大经典排序算法的复杂度分析

本文深入探讨了十种常见的排序算法,分为非线性时间比较类排序和线性时间非比较类排序两大类。详细讲解了各种算法的时间复杂度、空间复杂度及稳定性,并提供了具体的算法实现链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

十种常见排序算法可以分为两大类:

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。

线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。 

各排序算法复杂度及稳定性:

 相关概念

稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。

时间复杂度

1.时间复杂度
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
上面这一段解释是很规范的,但是对于非专业性的我们来说并不是那么好理解,说白了时间复杂度就是时间复杂度的计算并不是计算程序具体运行的时间,而是算法执行语句的次数。通常我们计算时间复杂度都是计算最坏情况 。

最坏时间复杂度和平均时间复杂度
 最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。
 这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长。
 平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。设每种情况的出现的概率为pi,平均时间复杂度则为sum(pi*f(n))

空间复杂度:

一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。  
(1)固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
(2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。
一个算法所需的存储空间用f(n)表示。S(n)=O(f(n))  其中n为问题的规模,S(n)表示空间复杂度。 

稳定性:

所谓稳定性是指待排序的序列中有两元素相等,排序之后它们的先后顺序不变.假如为A1,A2.它们的索引分别为1,2.则排序之后A1,A2的索引仍然是1和2.

稳定也可以理解为一切皆在掌握中,元素的位置处在你在控制中.而不稳定算法有时就有点碰运气,随机的成分.当两元素相等时它们的位置在排序后可能仍然相同.但也可能不同.是未可知的.

另外要注意的是:算法思想的本身是独立于编程语言的,所以你写代码去实现算法的时候很多细节可以做不同的处理.采用不稳定算法不管你具体实现时怎么写代码,最终相同元素位置总是不确定的(可能位置没变也可能变了).而稳定排序算法是你在具体实现时如果细节方面处理的好就会是稳定的,但有些细节没处理得到的结果仍然是不稳定的.

比如冒泡排序,直接插入排序,归并排序虽然是稳定排序算法,但如果你实现时细节没处理好得出的结果也是不稳定的.

稳定性的用处

我们平时自己在使用排序算法时用的测试数据就是简单的一些数值本身.没有任何关联信息.这在实际应用中一般没太多用处.实际应该中肯定是排序的数值关联到了其他信息,比如数据库中一个表的主键排序,主键是有关联到其他信息.另外比如对英语字母排序,英语字母的数值关联到了字母这个有意义的信息.

可能大部分时候我们不用考虑算法的稳定性.两个元素相等位置是前是后不重要.但有些时候稳定性确实有用处.它体现了程序的健壮性.比如你网站上针对最热门的文章或啥音乐电影之类的进行排名.由于这里排名不会像我们成绩排名会有并列第几名之说.所以出现了元素相等时也会有先后之分.如果添加进新的元素之后又要重新排名了.之前并列名次的最好是依然保持先后顺序才比较好.

冒泡排序:https://blog.youkuaiyun.com/alzzw/article/details/97906690

选择排序:https://blog.youkuaiyun.com/alzzw/article/details/97964320

插入排序:https://blog.youkuaiyun.com/alzzw/article/details/97967278

快速排序:https://blog.youkuaiyun.com/alzzw/article/details/97970371

归并排序:https://blog.youkuaiyun.com/alzzw/article/details/98047030

堆排序:https://blog.youkuaiyun.com/alzzw/article/details/98087519

基数排序:https://blog.youkuaiyun.com/alzzw/article/details/98240042

计数排序:https://blog.youkuaiyun.com/alzzw/article/details/98245871

参考:https://blog.youkuaiyun.com/xiaoxiaojie12321/article/details/81380834

https://blog.youkuaiyun.com/guoke2017/article/details/80929134 

<think>嗯,用户问的是LLC谐振电容的选型,这属于电源设计中的一个关键部分。首先,我需要回忆一下LLC谐振变换器的基本结构和工作原理。LLC通常由谐振电感、谐振电容和变压器的励磁电感组成谐振网络,谐振电容的选择直接影响到谐振频率、电压应力和效率。 接下来,用户可能是在设计电源时遇到了选型问题,或者想了解如何正确选择电容参数。需要考虑到电容的耐压值、容值、电流应力和频率特性。首先,耐压值必须足够,因为谐振电容承受的电压应力较高,尤其是在高输入电压的情况下。然后,容值需要根据谐振频率的要求来计算,可能涉及到公式推导,比如谐振频率的计算公式。同时,电容的RMS电流也是一个重要参数,需要确保电容能够承受工作时的电流,否则会导致过热甚至损坏。 用户可能没有提到的深层需求可能包括电容的寿命、温度特性以及成本因素。比如,在高温环境下,电容的容值会下降,ESR会增加,这可能影响整个LLC电路的性能。此外,高频应用下电容的寄生参数,如ESR和ESL,也需要考虑,因为这些会影响谐振回路的Q值和效率。 可能需要分步骤解释选型过程:首先确定谐振频率,计算所需容值;然后根据电压和电流选择合适规格的电容;接着考虑温度、频率特性以及可靠性因素。同时,实际应用中可能需要参考数据手册,测试验证电容的实际表现。 另外,需要注意不同类型的电容,如薄膜电容和陶瓷电容,在LLC中的应用差异。薄膜电容通常具有较高的耐压和较好的高频特性,适合大功率应用,而陶瓷电容可能在小功率或高频场景下更合适,但容值可能受限。 最后,可能需要提醒用户在实际设计中留有一定的余量,进行仿真和实验验证,确保选型的电容在实际电路中稳定可靠。</think>### LLC谐振电容选型要点及步骤 --- #### **一、基本概念** LLC谐振变换器的核心由**谐振电感(L<sub>r</sub>)、谐振电容(C<sub>r</sub>)**和**变压器励磁电感(L<sub>m</sub>)**组成。谐振电容的选型直接影响以下性能: - **谐振频率**:$$ f_r = \frac{1}{2\pi \sqrt{L_r C_r}} $$ - **电压/电流应力** - **系统效率与可靠性** --- #### **二、选型核心参数** 1. **耐压值(V<sub>rating</sub>)** - **要求**:谐振电容的额定电压需高于**最大输入电压峰值**,并留20%~30%余量。 - **公式**:$$ V_{C\_peak} = \frac{V_{in\_max}}{2} \cdot \sqrt{\frac{L_r}{L_m}} $$ 2. **容值(C<sub>r</sub>)** - **计算步骤**: 1. 根据目标谐振频率$$ f_r $$确定$$ C_r $$:$$ C_r = \frac{1}{(2\pi f_r)^2 L_r} $$ 2. 结合实际工况(如负载范围、频率调节需求)优化容值。 3. **RMS电流(I<sub>RMS</sub>)** - **公式**:$$ I_{C\_RMS} = \frac{\pi}{2\sqrt{2}} \cdot \frac{P_o}{\eta V_{in\_nom}} $$ - **选型要求**:电容的RMS电流承受能力需大于计算结果。 4. **频率特性与损耗** - 优先选择**低ESR(等效串联电阻)**电容,降低导通损耗。 - 高频场景(如>100kHz)需关注电容的**自发热特性**。 --- #### **三、电容类型选择** | **类型** | **特点** | **适用场景** | |----------------|-------------------------------------------------------------------------|-------------------------| | **薄膜电容** | 耐压高(1kV+)、高频特性好、温度稳定性强,但体积较大 | 大功率、高输入电压LLC | | **陶瓷电容** | 高频低ESR、体积小,但耐压较低(一般<100V)、容值温度敏感 | 小功率、高频LLC模块 | | **电解电容** | 容值大、成本低,但高频损耗大、寿命短 | 不推荐用于谐振回路 | --- #### **四、选型流程** 1. **确定输入/输出参数** - 输入电压范围($$ V_{in\_min} \sim V_{in\_max} $$) - 输出功率($$ P_o $$)、效率目标($$ \eta $$) 2. **计算谐振频率** - 根据拓扑需求选择$$ f_r $$(典型值:50kHz~1MHz)。 3. **计算谐振电容容值** - 通过$$ C_r = 1/((2\pi f_r)^2 L_r) $$确定理论值。 4. **校核电压/电流应力** - 验证$$ V_{C\_peak} $$和$$ I_{C\_RMS} $$是否在电容规格范围内。 5. **选型验证** - 仿真验证(如PSIM、LTspice) - 实际测试温升和谐振波形。 --- #### **五、注意事项** 1. **温度影响**:高温下电容容值下降,需选择**X7R/X7S**等高稳定性材料。 2. **寿命评估**:薄膜电容寿命通常>10万小时,电解电容需谨慎使用。 3. **布局优化**:缩短谐振回路PCB走线,降低寄生电感对谐振点的影响。 --- #### **六、案例参考** **某500W LLC电源参数**: - 输入电压:380V DC - 谐振频率:100kHz - 谐振电感:50μH - **谐振电容计算**: $$ C_r = \frac{1}{(2\pi \times 100\text{kHz})^2 \times 50\mu\text{H}} \approx 50\text{nF} $$ - **选型结果**:100nF/630V薄膜电容(并联组合,降低ESR)。 --- 通过以上步骤,可系统化完成LLC谐振电容选型,最终需结合实际测试调整参数。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿尔兹

如果觉得有用就推荐给你的朋友吧

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

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

打赏作者

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

抵扣说明:

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

余额充值