使用SCL语言实现一个冒泡排序的简单算法
文章目录
目录
文章目录
前言
二、实现排序
1.读取存储器地址(PEEK)指令
2.编写程序
总结
前言
本文我们来一起使用SCL来实现一个简单的算法——冒泡排序;它可以对少量数据进行从小到大或从大到小排序;另外它也是一种比较简单容易理解的一种排序方法。
一、冒泡排序
下面是在360摘抄的冒泡排序的含义和原理:
二、实现排序
这里我们在博图中建立编写环境然后创建数组和变量;这里我们可以直接定义一个起始值,然后排序;也可以输入相应的值,然后再排序;
1.读取存储器地址(PEEK)指令
我们建立两个数组,一个存放初始值,一个存放排序值;这里我们想要在初始数组里面输入数值,在排序数组里面显示排序后的值 ;我们要用到scl中的读取存储器地址指令来完成;
第1个参数是选择读取哪一个区的地址,其中:16#81是输入,16#82是输出,16#83是位存储区 ,16#84是DB数据块 ;
|
第2个参数是DB块的序号,如果是数据块DB1,那么序号就是1,以此类推;
第3个参数是待读取的地址,这里我是用的数据块,所以地址是它的偏移量;
2.编写程序
首先获取我们初始数组的数值传到排序数组中;#NP_TEMP 是一个整型变量,主要是用来获取数据块的偏移地址,每次循环+=2是因为是16位,也就是两个字节,对应相应的偏移量;
#NP_TEMP := 0;
FOR #i := 0 TO #len DO
"数据块_1".排序值[#i] := WORD_TO_INT(PEEK_WORD(area := b#16#84, dbNumber := 1, byteOffset := #NP_TEMP));
#NP_TEMP := #NP_TEMP + 2;
END_FOR;
这里再使用两个FOR循环,嵌套使用,对数组内的数值进行遍历,如果第一个大于第二个,就将第一个和第二个交换,然后以此类推;
第2for循环中每次减J是因为循环过一次之后最大的一个已经找到并排在最后了,所以第2次循环只要循环8次就够了,相同的道理,再一次循环之后仅次于最大的数也找到了,所以这里才每次-J;
FOR #j := 0 TO #len-1 DO
FOR #m := 0 TO #len - 1-#j DO
IF "数据块_1".排序值[#m] > "数据块_1".排序值[#m + 1] THEN
#t := "数据块_1".排序值[#m];
"数据块_1".排序值[#m] := "数据块_1".排序值[#m + 1];
"数据块_1".排序值[#m + 1] := #t;
END_IF;
END_FOR;
END_FOR;
效果:
总结
以上就是今天的所有内容啦!