龙海儿
关注《电气外传》公众号,知乎,CSDN等同号
级别: 论坛先锋
精华主题: 0
发帖数量: 334 个
工控威望: 1237 点
下载积分: 884 分
在线时间: 97(小时)
注册时间: 2018-04-13
最后登录: 2025-06-14
查看龙海儿的 主题 / 回贴
楼主  发表于: 39天前
图片:
图片:
图片:
1111MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal01111MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0
龙海儿11(同微博)      同《电气外传》微信公众号


我们在做一些数据管理的时候,往往要取最大值、最小值、求平均值、求和等。然而要得到以上结果是不是需要先对数据进行排序呢?那冒泡排序法自然是首选。让我们一起来做一下吧。


创造一个情境,第一步肯定是先建立一个数组。我这里用的11个int类型组成的数组(从0-10是11个)。在里面随机填上了0-10的乱序数据。


然后如图开始编写双层for循环程序。外层循环控制排序的次数,11个数据只需要循环10次即可。因为最后一个肯定已经满足了要求。内层循环需要处理每次的比较,遍历数组。实现数据移位和交换。切遍历次数依次在减少。


最后循环结束就可以得到组从小到大排序好的数据了。那么最小最大值直接从第一个和最后一个传送出去即可。求平均值和求和自然水到渠成,当然不排序也可以直接先去运算。
“冒泡”的含义其实就相当于把最大的数据从最后一个位置,通过交换操作,一步一步“浮现”到第一个位置的。实现方法比较简单,也易于理解。在一些小场景小规模数据处理中还是可以的,希望对大家有所帮助。
最后就写到这里,还是欢迎各位看官来深入讨论和批评指正!

关注《电气外传》公众号,知乎,CSDN等同号
哈喽123
不和不如自己的人争高低论短长!
级别: 略有小成
精华主题: 0
发帖数量: 208 个
工控威望: 405 点
下载积分: 2234 分
在线时间: 33(小时)
注册时间: 2023-03-02
最后登录: 2025-06-15
查看哈喽123的 主题 / 回贴
1楼  发表于: 39天前
我的建议是把提取的数放到一个新的数组里,而不是把现在的数组重新排序,例如现在的数组0的是7,按照你现在的思路,重新排序后的数组0变成了0,这不是一个好的解决办法,把数组里的数排序、取值,都不能改变现有的数组对应的数值,但是,正如楼主说的,处理这类型的数组时,SCL语言是最简洁的
1421448580
级别: 略有小成
精华主题: 0
发帖数量: 237 个
工控威望: 341 点
下载积分: 13366 分
在线时间: 909(小时)
注册时间: 2015-10-10
最后登录: 2025-05-26
查看1421448580的 主题 / 回贴
2楼  发表于: 39天前
大佬  写个最短路径搜索吧 让大家膜拜一下
龙海儿
关注《电气外传》公众号,知乎,CSDN等同号
级别: 论坛先锋
精华主题: 0
发帖数量: 334 个
工控威望: 1237 点
下载积分: 884 分
在线时间: 97(小时)
注册时间: 2018-04-13
最后登录: 2025-06-14
查看龙海儿的 主题 / 回贴
3楼  发表于: 39天前
引用
引用第1楼哈喽123于2025-05-08 09:22发表的  :
我的建议是把提取的数放到一个新的数组里,而不是把现在的数组重新排序,例如现在的数组0的是7,按照你现在的思路,重新排序后的数组0变成了0,这不是一个好的解决办法,把数组里的数排序、取值,都不能改变现有的数组对应的数值,但是,正如楼主说的,处理这类型的数组时,SCL语言是最简洁的

没有最简,只有更简,重要的理解后,分两个,分三个数组都可以。正序和逆序都可以。当然还有其它排序方法,
关注《电气外传》公众号,知乎,CSDN等同号
龙海儿
关注《电气外传》公众号,知乎,CSDN等同号
级别: 论坛先锋
精华主题: 0
发帖数量: 334 个
工控威望: 1237 点
下载积分: 884 分
在线时间: 97(小时)
注册时间: 2018-04-13
最后登录: 2025-06-14
查看龙海儿的 主题 / 回贴
4楼  发表于: 39天前
引用
引用第2楼1421448580于2025-05-08 09:57发表的  :
大佬  写个最短路径搜索吧 让大家膜拜一下

啥最短路径啊?
关注《电气外传》公众号,知乎,CSDN等同号
flyfeky
bilibili 工控小工匠孔
级别: 论坛先锋
精华主题: 0
发帖数量: 909 个
工控威望: 1061 点
下载积分: 2043 分
在线时间: 690(小时)
注册时间: 2012-05-09
最后登录: 2025-06-13
查看flyfeky的 主题 / 回贴
5楼  发表于: 33天前
//数组排序
#k := 99;  //  输入数组[0..99]
WHILE #k >= 0 DO  //外循环
    #j := 0;
    #i := 0;
    WHILE #i <= #k DO  // 内循环
        IF #arr[#j] < #arr[#i] THEN
            #j := #i;  // 记下最大值下标
        END_IF;
        IF #i = #k  THEN   // 循环完成交换当前值和最大值
            #buff := #arr[#i];
            #arr[#i] := #arr[#j];
            #arr[#j] := #buff;
        END_IF;
        #i := #i + 1;
    END_WHILE;
    #k := #k - 1;
END_WHILE;           我写了一个,也调试好了,欢迎参考 ,博图v16  , k ,j,buff   i都是int类型   ,arr是 [0..99] of int  输入输出类型
西门子倍福WPF+C#数据库,槽式设备专家