浅析基于C语言的常用排序算法比较

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2019年第3期 信息通信2019
(总第 195 期)INFORMATION&COMMUNICATIONS(Sum.N o 195)
浅析基于c语言的常用排序算法比较
王锦坤
(中国地质大学,湖北武汉430070)
摘要:作为计算机程序设计的重要操作,排序算法的优劣直接影响程序运行效率,因此文章开展了基于C语言的常用排 序算法比较,明确了排序算法的基本选择思路,并结合实例深入探讨了基于C语言的排序算法应用,希望能够为相关业 内人士带来一定启发。

关键词:C语言;选择排序;插入排序;起泡排序
中图分类号:TP301.6 文献标识码:A文章编号:1673-1131(2019)03-0083-03
在数据处理领域,排序算法属于较为常用的一种非数值 算法,该算法在计算机信息处理、数据分析、数据库操作等领 域能够发挥重要作用。

基于C语言的排序算法一般分为7种,即归并排序、基数排序、堆排序、快速排序、选择排序、起泡排 序、插入排序,本文研究主要围绕选择排序、插入排序、起泡排直至所有数据选择完毕属于选择排序的基本方法,用语言描 述便是首先找到最小或最大项,并将其与其他项分开,以此完 成排序。

但在基于C语言的选择排序算法应用中,该算法不 会考虑原序列的初始排序情况,哪怕原有数据已经完成从小 到大或从大到小排列,应用选择排序算法的程序也必须执行
序三种常见排序算法展开。

1基于C语言的常用排序算法比较
本节主要介绍了三种基于C语言的常用排序算法,分别 为选择排序算法、插入排序算法、起泡排序算法,并结合三种 算法的不足,提出了改进型算法且进行了简单对比。

1.1选择排序算法
次比较,这种情况下算法的应用复杂度为o(n2),而如果原序列元素较为庞大,选择排序算法的应用势必会因系统资源的较多占用造成不必要浪费。

为弥补选择排序算法的不足,树形选择排序算法应运而 生,这类基于C语言的选择排序算法能够将数据元素两两比 对,大者上升,上升元素再次进行两两比对,由此不断开展循
持续从待排序数据元素选择最小(最大)元素构成新序列,
表1隐藏前后的相似度计算结果
相似度 F.wav
歌曲1的P.w av0.99956
歌曲2的P.w av0.99973
歌曲3的P.w av0.99990
歌曲4的P.w av0.99943
歌曲5的P.w av0.99902
歌曲6的P w av0.99935
歌曲7的P.w av0.99909
歌曲8的P.w av0.99978
歌曲9的P.w av0.99940
歌曲10的P.w av0.99972
为了测试软件的隐藏和解除隐藏功能的可靠性,分别采 用30个不同的歌曲、诗朗诵、黄梅戏和京剧来隐藏不同的声 音。

隐藏和解除隐藏的正确率的测试结果见表2。

表2载体不同、隐蔽话音不同时隐藏和解除隐藏正确率載体类型蔽话在为與卢的成功串隐薮话音为女声的成功串
歌曲丨〇首100%100%
英文朗读丨0首100%100%
10首黄梅戏和京剧100*/.100%
3结语
虽然我们鼓励面对面的交流,对于性格外向的同学而言,向别人道歉也许不是一件难事。

但对性格内向(或偏内向)或 惧怕对方不接受道歉、担心丢面子的同学而言,如果能够消除 他们在道歉时的心理障碍,将有助于恢复同学友谊,及时化解 矛盾,构建更加和谐的校园环境。

目前国内大学和重点中学对心理疏导也非常重视,组建了专业教师队伍,而帮助化解同学间的矛盾也是学校心理疏
导的一项重要内容。

本文的研究构建了话音隐藏技术的一个新的应用,研发
了一个有助于缓解同学道歉时由于性格内向、羞涩或担心对
方不接受道歉所产生的心理障碍的应用软件,为有类似问题
困扰的同学提供了一个可供选择的方式,有助于构建和谐友
爱的同学关系和文明校园的建设。

参考文献:
[1]林森浩_百度百科,[EB/OL].(2015-12-15)[2018-12-10].https:/
//item/%E6%9E%97%E6%A3%AE%E6%
B5%A9/1090736lfi=aladdin.
[2]马加爵 _百度百科,[EB/O L].(2004-6-18)[2018-12-10].
https:///item/%E9%A9%AC%E5%8A%A0%
E7°/〇88%B5/154174fr=aladdin.
[3]柏森,胡中豫,等,通信信息隐匿技术[M].国防工业出版社,
2005.
[4]李旭杰,杨成胡,赵鸿燕,话音通信中的数据自适应隐藏算
法[J],电路与系统学报,2007,12(2):52-55.
[5]唐步天,郭立,刘振华.利用M F C C的语音信息隐藏方法[J].
中国科学院研究生院学报,2008,25(3):386-394.
[6]黄永峰,李松斌,网络隐蔽通信及其检测技术[M].清华大
学出版社,2016.
[7]刘浩,韩晶.MATLAB R2014a完全自学一本通[M].电子工
业出版社,2015年.
作者简介:高雅云(2002-),女,四川成都人,主要研究方向:信
息技术。

83
信息通信王锦坤:浅析基于C语言的常用排序算法比较
环式比对直至结束。

在应用的树形选择排序算法具体排序过程中,需基于一棵二叉树从底层开始进行数据元素的两两比 对,以此不断上升即可获得最大数据元素并将其放在二叉树 顶层,完成后即可全部清空最大数所在结点,再继续开展不断 循环的两两比较,选出最小的一个,即可完成排序。

深入分析 不难发现,基于C语言的树形选择排序算法需进行[l0&n]比较 完成一个较大元素选择,算法的应用复杂度为〇(nlog2n),相较 于最基本的选择排序算法,树形选择排序算法能够有效节约 系统资源。

值得注意的是,由于基于C语言的选择排序算法 (包括树形选择排序算法)均需要辅助空间进行交换,而树形 选择排序算法的平均性能更接近最坏性能,因此本文认为基 于C语言的选择排序算法较为不稳定,但在需要排序的数据 元素较少时,如数据元素数量不超过50个,选择排序算法、树 形选择排序算法均具备较高优势[1]。

1.2插入排序算法
在已经排序的数据序列中插入待排序的数据元素得到新的序列,属于插入排序算法的基本应用方式,直到所有待排序 元素完成插入,基于C语言的排序即可顺利完成。

以递增排 序为例,在插入排序算法的具体应用中,需首先将排序序列第 一个数据元素视作有序序列,并比较第一个、第二个数据元素,如第一个数据元素较大,则将其插在后面,否则将其插在前面; 同样将完成数据插入后得到了的新序列视作有序序列,使用 第三个数据元素从前向后比较,并结合比较结果将其插入比 自身大元素前,以此循环完成所有元素排序,排序目标便能够 顺利实现。

深入分析不难发现,基本插入排序算法的时间复 杂度为〇(n2),这是由于每一个数据元素的插入均需要从新序列的首部开始,而随着待排序元素不断增加,基本插入排序算 法所占用的空间、时间将不断增多,系统负担自然会大大提升。

为弥补插入排序算法存在的不足,折半排序算法应运而 生。

折半排序算法的应用需要在已排序的序列中插入待排序数据元素,但具体插入并不从头开始比较,而是从中间进行数 据元素比较,以此确定数据元素插入序列的前半部分或后半 部分,随后选择一半的中间进行比较,不断确定更小的一半, 折半排序算法即可最终找到合适位置插入待排列数据元素。

虽然折半排序算法在应用中没有改变原插入排序算法的占用 空间,也没有减少数据元素移动次数,这使得折半排序算法的 时间复杂度仍为〇(n2),但数据元素相互比较次数实现的大大减 少必须得到重视。

值得注意的是,无论是原插入排序算法,抑或 是折半排序算法,二者均不适合用于数据量比较大的排序应用,因此本文建议在数据量较小时候应用排序算法,必要时联合应 用插入排序算法和选择排序算法也能够取得不俗成果气
1.3起泡排序算法
“比较+交换”为起泡排序算法的核心思想,通过两两比较、逆序交换不断循环,即可最终完成排序。

以应用起泡排序算 法的递增排序过程为例,具体排序需首先比较前二个数据元 素,如第一个数据元素较大,则交换两个数据元素,随之进行 第二个与第三个数据元素的比较、交换,通过不断循环的逆序 交换,最大的数据元素便能够沉到序列的最后;继续比较前两 个数据元素,重复过程,即可最终完成应用起泡排序算法的排 序。

基于C语言的起泡排序算法排序平均时间复杂度为o(n2),如原序列为正序序列,比较的总次数为N-1 (循环比较必须进 行到底),如序列中数据元素较多,起泡排序算法的应用势必 会造成较大浪费,且该算法在耗时层面也存在显著劣势。

为弥补起泡排序算法不足,列队起泡排序应运而生,该算 法在应用中以标准数据元素为中心,列队以大小前后为依据, 再依次按照此方法进行队伍大小列队,由此即可最终完成数 据元素的排序。

在基于C语言的起泡排序算法应用中,用于 排序的标准应需选择待排序序列的第一个数据元素,并比较 该数据元素与其他数据元素,将小的数据元素排列在前,大的 数据元素排列在后,由此不断进行列队,即可最终实现数据元 素的递增排序。

改进后气泡排序算法的时间复杂度分为最坏、最好两种情况,分别为〇(n2)、0(n),可见列队起泡排序算法具 备的优势。

总的来说,基于C语言的起泡排序算法具备代码 编写容易优势,且稳定性较高,但考虑到其较低的排序效率, 原起泡排序算法仅适用于规模比较小的排序,列队起泡排序 算法适用于规模相对较大的排序,其耗时层面可由此得到较 好抵消[3]。

2实例应用分析
为提升研究的实践价值,本文围绕选择排序、插入排序、起泡排序三种常用排序算法改进算法的具体应用开展了详细 论述,主要包括树形选择排序算法、折半排序算法以及列队起 泡排序算法具体应用。

2.1树形选择排序算法
设存在需要进行排序的序列为:{65, 54, 78, 99, 86, 27, 42,67},采用基于C语言的树形选择排序算法进行排序,具体 排序过程如图1所示。

结合图片不难发现,树形选择排序算 法的应用在第一次比较中得到了 99这一最大的数据元素,第 二次则得到了 79这一次大的数据元素,应用树形选择排序算 法最终得到的排序结果为:{13,30,41,52, 53,68,79,99},基 于C语言的树形选择排序算法应用流程、价值由此得到了直 观展示。

图1应用树形选择排序算法的第一次(左)、第二次(右)比较2.2折半排序算法
设存在需要进行排序的序列为:{55,64,77,85,98},插入 一个数据元素26,采用基于C语言的折半排序算法进行排序。

通过比较插入数据元素26与中间数据元素77,可确定更小的 范围:{55,64,77},比较26与中间数据元素64,可得得到:{55, 64},由此即可确定插入位置,得到有序序列:{26, 64, 77, 85, 98},继续插入数据元素进行循环,即可最终完成所有插入数据 元素的排序,基于C语言的折半排序算法应用价值可见一斑。

2.3列队起泡排序算法
设需要进行排序的序列为{64,53,77,98,85,26,41,66},采用基于C语言的列队起泡排序算法进行排序,第一次列队 可得到:{53, 26, 41,H,77, 98, 85, 66},第二次列队可得到: {26, 41,囵,0,66, E3, 98, 85},第三次列队可得到:{团,41, 0,屈,0,H,98},由此即应用列队起泡排序算法完成了序列的递增排序,基于C语言的列队起泡 排序算法应用由此得到了直观展示。

84
2019年第3期 信息通信2019
(总第 195 期)INFORMATION&COMMUNICATIONS(Sum.N o 195)
电流模式脉宽调制直流-直流同步降压转换电路的设计
韩敏,严会会
(中国航空工业集团公司西安航空计算技术研究所,陕西西安710065)
摘要:文章设计了 一种电流模式脉宽调制直流-直流同步降压转换电路,输入电压可达40V,输出电流可达2A,开关频率 350kHz。

电路运用片上电流采样,结合分段斜率补偿,该峰值电流模式脉宽调制控制,获得了相当好的线性和负载调整 率,以及较快的负载动态响应速度。

在整个负载电流范围内(200mA~2A)内其具有高转换效率。

关键词:直流-直流同步降压转换电路;峰值电流模式;脉宽调制;高效率
中图分类号:TM46 文献标识码:A文章编号:1673-1131(2019)03-0085-02
Design of current mode pulse width modulation dc-dc synchronous buck converter
Han Min,Yan Hui-hui
(aeronautics computing technology researcli institute,X i’an Shaanxi,710065) Abstract:In this paper,a current mode pulse width modulation(PWM)dc-dc synchronous step-down converter is designed, with an input voltage up to40V,an output current up to2A,and a switching frequency o f350Khz.By using on-chip current sampling and piecewise slope compensation,the PWM control o f t he peak current mode achieves good linearity and load ad­justment rate,as well as fast load dynamic response speed.It has high conversion efficiency in the whole load current range (200mA〜2A)_
Keywords:dc-dc synchronous step-down converter,Peak current-mode,Pulse width modulation(PWM),High conversion ef­ficiency
〇引言
随着机载设备功能的增多,任务处理能力的提高,系统 功耗也相应的快速上升。

为减小设备的尺寸和重量,高功 率密度、高效率、小型化的直流-直流开关电源转换电路被广泛应用。

由于机载设备的负载电流变化范围可以从几十毫安到几安培,同时负载瞬态电流变化剧烈,因此直流-直 流开关电源转换电路既要保证在全负载范围内的高效率,又要具有很好的线性和负载调整率,以及快速的负载动态响应能力。

而更高的开关频率,使得开关电源可以在使用较小电感和输出滤波电容的条件下,获得理想的输出电压纹波。

本文设计的直流-直流开关电源转换电路,采用电流模式 脉宽调制及同步整流技术,在保证系统具有很好的线性和负 载调整率的同时,具备较好的负载动态响应性能。

350k H z的 工作频率,大大降低了外部系统电感尺寸,极大优化了效率和 对高要求负载点的供电可靠性。

1方案设计
本文提出的电流模式脉宽调制直流-直流同步降压转换电路结构框图如图1所示。

转换电路包括功率输出级和反馈控制网络两大部分。

直流-直流降压功率输出级由主功率N M O S开关、同步续流N M O S开关、以及电感L和输出电容C out所组成。

其中同步续流M O S开关用于取代常规功率输出级中的肖特基续流二极管,由于M O S开关具有比肖特基开 关更低的导通压降,这可以有效降低功率输出级的直流损耗,提高转换效率。

片外电感L和电容C o u t构成低通滤波器。

输出电压Vout通过片外电阻R1、R2组成的分压器得到反馈电压V fb。

误差放大器把反馈电压与芯片内部参考电压之间的误差值放大,并经过频率补偿电路移相后输出至脉宽调制比较器的反相输入端。

电流采样电路采样流过功率NMOS 管的上升电感电流,采样信号与斜率补偿信号相加后送到脉宽调制比较器的同相输入端。

振荡器产生的窄脉冲时钟信号和脉宽调制比较器的输出通过脉宽调制逻辑形成脉宽调制信 号。

峰值限流比较器采用电流采样信号与固定的阈值相比较,在每个开关周期内当电感电流峰值超过规定的上限值时快速的关断主开关。

倒灌电流比较器检测流过续流NMOS 管的下降电感电流,当从开关侧流向输出侧的电流下降到规定的下限值时,快速关断续流开关。

上、下侧驱动电路用于驱动片上主功率N M O S管和续流N M O S管,同时提供有效的 死区时间保护。

3结语
综上所述,基于C语言的常用排序算法各自具备不同的 特点,如插入排序算法的程序编写较为简单、列队起泡排序算 法的优越性较高,在此基础上,本文涉及的树形选择排序算法、折半排序算法、列队起泡排序算法的具有应用,则直观展示了 基于C语言的排序算法应用路径,而为了实现更高水平的排 序算法应用,针对性的排序算法选择、结合实际的排序算法改 进必须得到重视。

参考文献:
[1]孟小丁,白春霞.C语言中常见的几种算法浅析[J].电脑知
识与技术,2018,14(34):215-216+229.
[2]仓业金.C语言中的几种排序[J].科技展望,2014(23):2-3.
[3]龚佳,刘远军.一种双向冒泡排序算法的C语言实现及其
效率分析[J].福建电脑,2013,29(11):55-56+94.
作者简介:王锦坤(1997-),男,湖北武汉人,本科在读,研究方向:算法研究。

85。

相关文档
最新文档