合信论坛

快捷导航
查看: 9904|回复: 0

使用CF块写的冒泡排序例程

[复制链接]

29

主题

32

帖子

1189

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1189
QQ
发表于 2021-9-13 11:48:17 | 显示全部楼层 |阅读模式
适用于字节、字、双字、浮点,基于冒泡法+数据读写编写。用于将任意长度的某段存储区内数据从大到小排序后存储到另一存储区
C函数整体和程序块调用:
程序整体.png
块调用.png

几种运算结果:
字节调整.png
字调整.png
双字调整.png
浮点调整.png
↓↓↓↓↓↓↓↓源代码↓↓↓↓↓↓↓↓
//        switch用于输入输出判断属于哪种类型的数据。
//        中间使用for嵌套调整数组data_t 内数据排序。
//        14-23行:输入,        29-40行:调整,        42-51行:输出。
#include "math.h"
#include "stdio.h"
#include "plc300.h"
S32 l;
U16 j, k;


void CF_0( void* data_in, U16 len, U8 type, void* data_out)
{
        S32 data_t[len];                //        len长度的数组,用于存储数据


        for(j=0; j<len; j++)                //        将data_in指定V区中len数量的数据获取到数组data_t 中
        {
                switch(type)                //        判断数据长度(type==?)1:字节/ 2:字/ 4:双字/ 其他:非法,不获取数据
                {
                        case 1: data_t[j] =getS8(data_in+j); break;
                        case 2: data_t[j] =getS16(data_in+2*j); break;
                        case 4: data_t[j] =getS32(data_in+4*j); break;
                        default: break;
                }
        }


        //        数据调整原理:
        //        一级for:限制数据调整范围,不对已经存储好的数据进行二次判断,所以要越来越小
        //        二级for:使用if条件判断从第一个数据开始,到范围内最后一个数据依次对相邻数据进行判断,将范围内最小值放到最后面,范围内所有值判断完成后回到一级for缩小范围锁定当前最小值
        //        if判断:如果当前值小于下一个值,就把当前值跟下一个值互换位置,否则不执行调整;然后回到二级for开始判断下一值
        for(j=len; j>1; j--)
        {
                for(k=0; k<j-1; k++)
                {
                        if(data_t[k] <data_t[k+1])
                        {
                                l =data_t[k];
                                data_t[k] =data_t[k+1];
                                data_t[k+1] =l;
                        }
                }
        }


        for(j=0; j<len; j++)                //        将数组data_t 中的数据恢复到data_out指定V区中
        {
                switch(type)                //        判断数据长度(type==?)1:字节/2:字/4:双字/其他:非法,不输出数据
                {
                        case 1: setS8(data_out+j ,data_t[j]); break;
                        case 2: setS16(data_out+2*j ,data_t[j]); break;
                        case 4: setS32(data_out+4*j ,data_t[j]); break;
                        default: break;
                }
        }
}



冒泡排序.rar

12.3 KB, 下载次数: 762

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

客服热线
400-700-4858 周一至周五:09:00 - 18:00
深圳市南山区打石一路深圳国际创新谷6栋A座9层

深圳市合信自动化技术有限公司(简称“合信技术”)成立于2003年,高新技术企业,专注于工业自动化产品的研发、生产、销售和技术服务,依靠高质量、高性能的自动化控制产品与方案为客户创造最大价值,立志于成为全球领先的工业自动化解决方案供应商。

Archiver|手机版|小黑屋|COTRUST Inc. ( 粤ICP备13051915号 )

GMT+8, 2024-7-24 02:47 , Processed in 0.075175 second(s), 24 queries .

快速回复 返回顶部 返回列表