[西门子] PLC数据算法:选择排序法,几行代码搞定!

[复制链接]
查看109 | 回复0 | 3 天前 | 显示全部楼层 |阅读模式
>

文末有55个实战案例资料

导读:在一些特殊的应用场景,需要对设备进行顺序排序,那么我们常用的排序方法有冒泡排序、选择排序、插入排序、归并排序等方法。之前的文章中讲解过冒泡排序,那么本文来使用“选择排序”的算法做演示,便于大家在做编程的时候可以借鉴。

选择排序的原理:

先在未排序序列中找到最小(或最大)元素,存放到排序序列起始位置,然后在剩余未排序元素中继续找最小(或最大)元素,放到已排序序列末尾。例如对[8, 3, 4, 9]排序,第一趟找到最小的3放在首位,接着对剩余元素操作,直到全部排序。

举例:以下是将数据[8, 6,7, 3]进行排序的过程。

1轮:将第1个数据和后面的3个数据进行比较:

186比较,68小,将6放到最前面,变成[6, 8, 7,3]

267比较,67小,6仍然是最前,变成[6, 8, 7,3]

363比较,36小,将3放到最前面,变成[3, 8, 7,6]

2轮:仍然是将第2个数据与后面的3个数据比较

3轮:仍然是将第3个数据与后面的3个数据比较

其实根据以上的逻辑及规律可以看出:如果有4个数据的话,第一轮是只需要比较3次;第二轮是第2个数据和后面的两个数据比较,只需要比较2次;第三轮是第3个数据和后面的一个数据比较,只需要比较1次。根据这个规律我们把选择排序的思路理一下。

(1)将未排序的第1个数字和剩余的每个数字进行对比,如果与预期的顺序(升序)不符,则换位

(2)需要进行多轮循环,可以使用嵌套的循环来实现

(3)外层循环表示循环轮次,数组的长度-1

①初始条件: int i=0

②循环条件: i<数组长度– 1

例如有4个数据,需要3

(4)内层循环用于对比和换位

①初始条件: int j =i +l

②循环条件: j<数组长度

程序解读:

程序行1是将数据放入到静态变量中,便于参与运算

外层循环:

使用FOR循环从数组的第一个元素开始遍历,直到倒数第二个元素。变量i作为外层循环的索引。在每次外层循环中,假设当前索引i对应的元素是未排序部分中的最小值的索引,即#minIndex :=#i

内层循环:

内层循环从i +1 开始,遍历到数组的最后一个元素。变量 j 作为内层循环的索引。

在内层循环中,比较“#暂存数据[#j]”和“#暂存数据[#MinIndex]”,如果“#暂存数据[#j]”小于 “#暂存数据[#MinIndex]”,则更新minIndexj,表示找到了更小的值。

交换元素:

内层循环结束后,找到了未排序部分中的最小值的索引minIndex 

将 “#暂存数据[#i]”和 “#暂存数据[#MinIndex]”进行交换,即将当前找到的最小值放到已排序部分的末尾。

调用FB块,并且分配参数以及监控数据

数据监控

最近有很多小伙伴说要案例书籍,说是手机上看文章不是很方便,我抽时间把55个实战案例全部整理出来,案例都是比较典型的,其中包括气缸控制程序、报警程序、程序框架、运动控制程序封装、模拟量控制变频器、通信等实战案例。需要的可以加我微信:biao467524527,如果加不上可以私信我。





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则