查看: 1039|回复: 20
收起左侧

冒泡法排序算法

小子龙 2023-7-30 23:42:30 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
本帖最后由 小子龙 于 2023-8-4 09:26 编辑

在面对一些大小顺序比较混乱的一些数据时,会有将其进行从小到大的顺序排列的需求,工程中最常用的排序方法要属冒泡法排序了。
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟,仍然重复第一趟的过程直到结束,可以把第二大的数放到了倒数第二个位置,一共运行n趟,n是这些数组的个数,就会把最小的数放到数组第一个位置。这样在进行n-1趟的运行排序后,这组数组就会按照从小到大的顺序进行排列。
图片.png
从冒泡法的上述过程可以看出,由于在排序的过程中总是小数往前面放,大数往后面放,相当于气泡在往上升,所以也叫做冒泡排序。
图片.png
在中型PLC中,运用ST语言我们想要实现这个算法,可以利用两次FOR循环的嵌套(双重循环)来实现这个功能,外层的FOR循环主要体现在运行的趟数,从1到数组个数n-1趟,内层的FOR循环主要比较第一个点和其后面点到第n-1点和其后面点的比较。
举个例子,比如以下数组(包括6个元素):
图片.png
通过以下程序,采用双重循环进行实现:
图片.png
进行冒泡法排序后,数组的值为:
图片.png
上述程序通过采用冒泡法,实现了对一个排序混乱的数组进行重新排序,实现了数组的重新排序。
针对评论区的建议,对冒泡法排序进行了改进,为了减少for循环运算的步骤,节省计算机运算的ram,内层的j循环其实不用从第1到第(数组个数-1)的循环,可以针对外层的i,从第(数组个数-i)到1的循环,每次运行-1的个数即可,这么做相对于之前的算法省去了很多for循环的步骤,之前的步骤是5×5=25步,现在是5+4+3+2+1=15步,在应对较多的数组个数排序时存在着很大的优势。
图片.png

点评

赞  发表于 2023-8-3 09:04
感谢分享  发表于 2023-8-1 08:22
感谢分享***  发表于 2023-7-31 11:42
什么场景回应用到?  发表于 2023-7-31 11:30

已有 0 人打赏作者

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香! 鲜花榜单
  • +10

    收下我的花那就爱我吧!

回复 邀请回答送花

使用道具 举报

学海无涯627 2023-7-31 11:28:56 | 显示全部楼层
什么场景回应用到?
回复 送花

使用道具 举报

学海无涯627 2023-7-31 11:30:06 | 显示全部楼层
什么场景回应用到?
回复 送花

使用道具 举报

工控小小白! 2023-7-31 11:38:10 | 显示全部楼层
这样很占CPU处理效率的,还需要优化
回复 送花

使用道具 举报

小子龙 2023-7-31 18:26:18 | 显示全部楼层
刚到评论区说到应用场景的问题,其实冒泡法排序场合还是很多的,在一些数据库查询,传感器信号采集后筛选噪音信号、一组数据中找第一到第n大的数等场合,都会用到冒泡法排序的思路,掌握了上述方法可以省去很多代码的工作量!
回复 送花

使用道具 举报

瞬间AK 2023-8-1 08:11:02 | 显示全部楼层
很好案例,感谢楼主分享
回复 送花

使用道具 举报

tanzu 2023-8-1 08:14:02 | 显示全部楼层
谢谢分享,复习了忘记的知识
回复 送花

使用道具 举报

AUS 2023-8-1 11:13:23 | 显示全部楼层
你这个会有多余的循环步。我看了标准的冒泡排序,里面那层循环中应该是
FOR j TO 5-i TO 1 DO
这样才不会出现重复排序的情况
回复 送花

使用道具 举报

A远方 2023-8-1 19:01:14 | 显示全部楼层
AUS 发表于 2023-8-1 11:13
你这个会有多余的循环步。我看了标准的冒泡排序,里面那层循环中应该是
FOR j TO 5-i TO 1 DO
这样才不会出 ...

应该是FOR j TO 5-(i-1) TO 1 DO
回复 送花

使用道具 举报

小子龙 2023-8-2 09:01:35 | 显示全部楼层
AUS 发表于 2023-8-1 11:13
你这个会有多余的循环步。我看了标准的冒泡排序,里面那层循环中应该是
FOR j TO 5-i TO 1 DO
这样才不会出 ...

好的,我学习一下,谢谢指导,这么做好像会比较省rpm
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部