恭喜,你发布的帖子
发布于 2019-02-25 15:13:33
3楼
看看这个能用不?
SUBROUTINE_BLOCK I排序:SBR1
TITLE=密码:dddd
// 程序耗时。
// 10个数据 倒序排列使用16.5毫秒 顺序排列用11毫秒
//
// 20个数据 倒序 66毫秒 顺序 43
//
// 30个数据 倒序 150毫秒 顺序 96
//
// 40个数据 倒序 267 顺序 171
//
// 50个数据 倒序 418 顺序 267
//
// 55个 倒序 508 顺序 324
VAR_INPUT
表头:INT;
个数:INT;
END_VAR
VAR
外当前:INT;
外次数:INT;
内当前:INT;
内次数:INT;
指针1:DWORD;
指针2:DWORD;
save:INT;
END_VAR
BEGIN
Network 1
LD SM0.0
MOVW 16#0800, LW12
MOVW LW2, LW6
DECW LW6
MOVW LW2, LW10
MOVW 0, LW4
MOVW 0, LW8
Network 2
LD SM0.0
FOR LW4, 1, LW6
Network 3
LD SM0.0
DECW LW10
Network 4 // 确定比较区域的首个地址的偏移
LD SM0.0
MOVW LW0, LW14
Network 5
LD SM0.0
FOR LW8, 1, LW10
Network 6 // 确定另一个相邻的比较数据
LD SM0.0
MOVD +2, LD16
+D LD12, LD16
Network 7 // 第一个大于第二个就换位 内循环 第一轮执行 第一个与第二个比较 第二轮执行 第二个与第三个比较 。。。。。。
LDW> *LD12, *LD16
MOVW *LD12, LW20
MOVW *LD16, *LD12
MOVW LW20, *LD16
Network 8 // 指向下一个数据
LD SM0.0
INCD LD12
INCD LD12
Network 9 // 内循环返回
NEXT
Network 10 // 第一次执行到这里内循环已经执行了LW2次。 最大值已经出现在最下面。
NEXT
END_SUBROUTINE_BLOCK
这个是在原位进行排序。会破坏原有数据。使用前要块移动到其他地方再排。
请填写推广理由:
分享
只看
楼主