设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
西门子SCL编程实例——选择排序算法
返回列表
发新帖
[西门子]
西门子SCL编程实例——选择排序算法
[复制链接]
43818
|
0
|
2024-3-12 14:57:07
|
显示全部楼层
|
阅读模式
前面的文章我们介绍了冒泡排序算法(西门子SCL编程实例——冒泡排序算法(更新版)),今天这篇文章,我们来介绍下选择排序算法。
选择排序算法包括升序和降序两种方式,其基本思路如下:
如果是升序排列,则第一轮从数据源中找到最小值排在第一位,第二轮从剩下的数据中寻找最小值排在第二位,第三轮在再从剩下的数据中寻找最小值排在第三位。依次类推,直到所有数据遍历完毕;
如果是降序排列,则第一轮从数据源中找到最大值排在第一位,第二轮从剩下的数据中寻找最大值排在第二位,第三轮在再从剩下的数据中寻找最大值排在第三位。依次类推,直到所有数据遍历完毕;
下面来介绍SCL语言实现的选择排序代码。
在博途环境下新建函数块FB5013_SelectionSort,声明变量如下:
其中:
enable:使能排序,内部上升沿检测;
mode:排序方式,0=升序,1=降序;
LBound:数组下限;
UBound:数组上限;
arraySort:排序的数据源,不定长数组;
代码如下:
使用之前介绍的文章《西门子SCL编程实例——产生随机数的算法》生成随机数并存放到测试数据块DB200中,OB1代码如下:
测试结果如下:
这段代码我测试过多次,包括不同的数组上、下限及升序和降序。关于函数块RandomTest,请看之前的几篇文章介绍。
选择排序中有两种动作:比较和交换。比较是所有数据之间,而交换则在必要的情况下才发生。假设数组有n个元素,则交换操作次数介于0~(n-1)之间。最好情况是源数据为有序且同序,这种情况交换0次;最坏情况交换n-1次;若源数据有序且为逆序,则交换n/2次。通常来说,选择排序交换的次数比冒泡排序少,而交换数据是耗费CPU时间的,因此当n值较小时,选择排序比冒泡排序要快。
关于选择排序算法就先介绍到这里,如果你有任何问题,欢迎留言讨论。更多内容请看SCL教程合集。
我的书《西门子S7-1200/1500 PLC SCL语言编程》比较详细的介绍了SCL的编程,感兴趣的话可以点击下面的链接或者左下角的【阅读原文】:
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
屯蒙闲谈
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』