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