开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5657|回复: 2
收起左侧

[已回应] 数组_排序 增加数字逻辑判断以及数组反序的改进

[复制链接]
结帖率:100% (11/11)
发表于 2020-11-12 16:32:21 | 显示全部楼层 |阅读模式   陕西省渭南市
就象系统对 文件1 文件10 文件2 这种排序的改进一样.

  
子程序名返回值类型公开备 注
文本数字分割_ 连续数字为一组,汉字数字字母单独为一组
参数名类 型参考可空数组备 注
参_文本文本型
参_文本数组文本型
变量名类 型静态数组备 注
偏移整数型 
指针整数型 
文本文本型 
' 初始化数组,防止有内容
重定义数组 (参_文本数组, 假, 0)
指针 = 1
判断循环首 (指针 ≤ 取文本长度 (参_文本))
文本 = “”
如果真 (取代码 (参_文本, 指针) < 0)
' 如果是汉字,一次取两个字符
加入成员 (参_文本数组, 取文本中间 (参_文本, 指针, 2))
指针 = 指针 + 2
到循环尾 ()

判断循环首 (取代码 (参_文本, 指针) > 47 取代码 (参_文本, 指针) < 58)
' 如果是数字,一次取出相邻所有数字
文本 = 文本 + 取文本中间 (参_文本, 指针, 1)
指针 = 指针 + 1
判断循环尾 ()
如果真 (文本 ≠ “”)
' 将一组数字加入数组
加入成员 (参_文本数组, 文本)
到循环尾 ()
' 加入字母
加入成员 (参_文本数组, 取文本中间 (参_文本, 指针, 1))
指针 = 指针 + 1
判断循环尾 ()
子程序名返回值类型公开备 注
数组_排序_多列 二分法排序.只能对文本数组进行排序,整数数组请用核心支持库的.
参数名类 型参考可空数组备 注
要排序的数组文本型
排序方式字节型可空,默认为0  0=升序排序 1=降序排序
区分大小写逻辑型可空,默认“真”。真=区分大小写,假=不区分
变量名类 型静态数组备 注
N整数型 
排序数组文本型0
成员数量整数型 
高位整数型 
低位整数型 
中间位整数型 
比较结果整数型感谢会员 落雪 提供代码
复制数组 (排序数组, 要排序的数组)
清除数组 (要排序的数组)
如果真 (是否为空 (区分大小写))
区分大小写 = 真

计次循环首 (取数组成员数 (排序数组), N)
判断 (成员数量 = 0)
插入成员 (要排序的数组, 1, 排序数组 [N])


高位 = 成员数量
低位 = 1
中间位 (高位 + 低位) \ 2
' ; lstrcmp 通过比较ASCII码进行文本的排序,速度快,但存在问题
比较结果 = 多列比较 (排序数组 [N], 要排序的数组 [成员数量], 区分大小写)
判断 (比较结果 ≥ 0)
插入成员 (要排序的数组, 成员数量 + 1, 排序数组 [N])
判断 (多列比较 (排序数组 [N], 要排序的数组 [1], 区分大小写) ≤ 0)
插入成员 (要排序的数组, 1, 排序数组 [N])
判断循环首 (高位 - 低位 > 1)
如果真 (排序数组 [N] = 要排序的数组 [中间位])
跳出循环 ()
如果 (多列比较 (排序数组 [N], 要排序的数组 [中间位], 区分大小写) < 0)
高位 = 中间位
低位 = 中间位
中间位 (高位 + 低位) \ 2
判断循环尾 ()
判断 (多列比较 (排序数组 [N], 要排序的数组 [中间位], 区分大小写) ≤ 0)
插入成员 (要排序的数组, 中间位, 排序数组 [N])
插入成员 (要排序的数组, 中间位 + 1, 排序数组 [N])


成员数量 = 取数组成员数 (要排序的数组)
计次循环尾 ()
如果真 (排序方式 = 1)
数组_反转_ (要排序的数组)

子程序名返回值类型公开备 注
多列比较整数型 按数组顺序进行文本比较
参数名类 型参考可空数组备 注
参_文本1文本型
参_文本2文本型
区别大小写逻辑型
变量名类 型静态数组备 注
比较数组1文本型0
比较数组2文本型0
计数器整数型 
返回值整数型 
整数1整数型 
整数2整数型 
' 如果是一样的文本就直接返回0
如果真 (文本比较 (参_文本1, 参_文本2, 区别大小写) = 0)
返回 (0)
' 使用静态数组防止重复分配变量,所以要初始化
重定义数组 (比较数组1, 假, 0)
重定义数组 (比较数组2, 假, 0)
' 生成分割的数组
文本数字分割_ (参_文本1, 比较数组1)
文本数字分割_ (参_文本2, 比较数组2)
计次循环首 (取数组成员数 (比较数组1), 计数器)
' 文本2大于文本1,返回1
如果真 (计数器 > 取数组成员数 (比较数组2))
返回 (1)
整数1 = 到整数 (比较数组1 [计数器])
整数2 = 到整数 (比较数组2 [计数器])
' 如果是整数成员,进行数值比较,否则进行文本比较
如果 (整数1 ≠ 0 整数2 ≠ 0)
如果 (整数1 < 整数2)
返回值 = -1
返回值 = 1

返回值 = 文本比较 (比较数组1 [计数器], 比较数组2 [计数器], 区别大小写)
' 如果同组数组成员相同,进入下一轮循环
如果真 (返回值 = 0)
到循环尾 ()
' 成员比较不同,返回比较值
返回 (返回值)
计次循环尾 ()
' 文本1大于文本2,返回-1
返回 (-1)
子程序名返回值类型公开备 注
数组_反转_ 数组倒序。数组的第一个成员与最后一个成员互换,第二个和倒数第二个互换,以此类推
参数名类 型参考可空数组备 注
反转的数组文本型
变量名类 型静态数组备 注
成员数量整数型 
计数器整数型 
成员数量 = 取数组成员数 (反转的数组)
计次循环首 (成员数量 \ 2, 计数器)
交换变量 (反转的数组 [计数器], 反转的数组 [成员数量 - 计数器 + 1])
计次循环尾 ()

评分

参与人数 1好评 +1 精币 +5 收起 理由
项目部004 + 1 + 5 奉上小小红包希望笑纳!~

查看全部评分

结帖率:100% (11/11)

签到天数: 16 天

 楼主| 发表于 2020-11-14 08:38:58 | 显示全部楼层   陕西省渭南市
对文本分割进行了改进.使用指针读写内存.能快不少.

  
子程序名返回值类型公开备 注
数组_排序_多列 二分法排序.只能对文本数组进行排序,整数数组请用核心支持库的.
参数名类 型参考可空数组备 注
要排序的数组文本型
排序方式字节型可空,默认为0  0=升序排序 1=降序排序
区分大小写逻辑型可空,默认“真”。真=区分大小写,假=不区分
变量名类 型静态数组备 注
新添加成员整数型 
排序数组文本型0
成员数量整数型 
高位整数型 
低位整数型 
中间位整数型 
比较结果整数型感谢会员 落雪 提供代码
复制数组 (排序数组, 要排序的数组)
清除数组 (要排序的数组)
如果真 (是否为空 (区分大小写))
区分大小写 = 真

计次循环首 (取数组成员数 (排序数组), 新添加成员)
判断 (成员数量 = 0)
插入成员 (要排序的数组, 1, 排序数组 [新添加成员])


高位 = 成员数量
低位 = 1
中间位 (高位 + 低位) \ 2
' ; lstrcmp 通过比较ASCII码进行文本的排序,速度快,但存在问题
比较结果 = 多列比较 (排序数组 [新添加成员], 要排序的数组 [成员数量], 区分大小写)
如果 (比较结果 ≥ 0)
插入成员 (要排序的数组, 成员数量 + 1, 排序数组 [新添加成员])
如果 (多列比较 (排序数组 [新添加成员], 要排序的数组 [1], 区分大小写) ≤ 0)
插入成员 (要排序的数组, 1, 排序数组 [新添加成员])
判断循环首 (高位 - 低位 > 1)
如果真 (排序数组 [新添加成员] = 要排序的数组 [中间位])
跳出循环 ()
如果 (多列比较 (排序数组 [新添加成员], 要排序的数组 [中间位], 区分大小写) < 0)
高位 = 中间位
低位 = 中间位
中间位 (高位 + 低位) \ 2
判断循环尾 ()
如果 (多列比较 (排序数组 [新添加成员], 要排序的数组 [中间位], 区分大小写) ≤ 0)
插入成员 (要排序的数组, 中间位, 排序数组 [新添加成员])
插入成员 (要排序的数组, 中间位 + 1, 排序数组 [新添加成员])



成员数量 = 取数组成员数 (要排序的数组)
计次循环尾 ()
如果真 (排序方式 = 1)
数组_反转_ (要排序的数组)

子程序名返回值类型公开备 注
多列比较整数型 按数组顺序进行文本比较
参数名类 型参考可空数组备 注
参_文本1文本型
参_文本2文本型
区别大小写逻辑型
变量名类 型静态数组备 注
比较数组1文本型0
比较数组2文本型0
计数器整数型 
返回值整数型 
整数1整数型 
整数2整数型 
' 如果是一样的文本就直接返回0
如果真 (文本比较 (参_文本1, 参_文本2, 区别大小写) = 0)
返回 (0)
' 使用静态数组防止重复分配变量,所以要初始化
重定义数组 (比较数组1, 假, 0)
重定义数组 (比较数组2, 假, 0)
' 生成分割的数组
文本属性分割 (参_文本1, 比较数组1)
文本属性分割 (参_文本2, 比较数组2)
计次循环首 (取数组成员数 (比较数组1), 计数器)
' 文本2大于文本1,返回1
如果真 (计数器 > 取数组成员数 (比较数组2))
返回 (1)
整数1 = 到整数 (比较数组1 [计数器])
整数2 = 到整数 (比较数组2 [计数器])
' 如果是整数成员,进行数值比较,否则进行文本比较
如果 (整数1 ≠ 0 整数2 ≠ 0)
如果 (整数1 < 整数2)
返回值 = -1
返回值 = 1

返回值 = 文本比较 (比较数组1 [计数器], 比较数组2 [计数器], 区别大小写)
' 如果同组数组成员相同,进入下一轮循环
如果真 (返回值 = 0)
到循环尾 ()
' 成员比较不同,返回比较值
返回 (返回值)
计次循环尾 ()
' 文本1大于文本2,返回-1
返回 (-1)
子程序名返回值类型公开备 注
数组_反转_ 数组倒序。数组的第一个成员与最后一个成员互换,第二个和倒数第二个互换,以此类推
参数名类 型参考可空数组备 注
反转的数组文本型
变量名类 型静态数组备 注
成员数量整数型 
计数器整数型 
成员数量 = 取数组成员数 (反转的数组)
计次循环首 (成员数量 \ 2, 计数器)
交换变量 (反转的数组 [计数器], 反转的数组 [成员数量 - 计数器 + 1])
计次循环尾 ()
子程序名返回值类型公开备 注
文本属性分割 连续数字为一组,汉字数字字母单独为一组
参数名类 型参考可空数组备 注
参_文本文本型
参_文本数组文本型
变量名类 型静态数组备 注
局_内容指针整数型 
局_内存句柄整数型 
局_内容地址整数型 
局_数字位数整数型 
' 初始化数组,防止有内容
重定义数组 (参_文本数组, 假, 0)
局_内容地址 = 取变量数据地址 (参_文本)
局_内容指针 = 0
局_内存句柄 = 申请内存 (取文本长度 (参_文本), )
判断循环首 (局_内容指针 < 取文本长度 (参_文本))
局_数字位数 = 0
如果真 (指针到字节 (局_内容地址 + 局_内容指针) > 127)
' 如果是汉字,一次取两个字符
写到内存 (指针到字节集 (局_内容地址 + 局_内容指针, 2){ 0 }, 局_内存句柄, 3)
加入成员 (参_文本数组, 指针到文本 (局_内存句柄))
局_内容指针 = 局_内容指针 + 2
到循环尾 ()

判断循环首 (指针到字节 (局_内容地址 + 局_内容指针) > 47 指针到字节 (局_内容地址 + 局_内容指针) < 58)
' 如果是数字,一次取出相邻所有数字
写到内存 (指针到字节集 (局_内容地址 + 局_内容指针, 1), 局_内存句柄 + 局_数字位数, 1)
局_数字位数 = 局_数字位数 + 1
局_内容指针 = 局_内容指针 + 1
判断循环尾 ()
如果真 (局_数字位数 > 0)
' 将一组数字加入数组
写到内存 ({ 0 }, 局_内存句柄 + 局_数字位数, 1)
加入成员 (参_文本数组, 指针到文本 (局_内存句柄))
到循环尾 ()
' 加入字母
写到内存 (指针到字节集 (局_内容地址 + 局_内容指针, 1){ 0 }, 局_内存句柄, 2)
加入成员 (参_文本数组, 指针到文本 (局_内存句柄))
局_内容指针 = 局_内容指针 + 1
判断循环尾 ()
释放内存 (局_内存句柄)
子程序名返回值类型公开备 注
指针到字节字节型 
参数名类 型参考可空数组备 注
指针整数型
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })
返回 (0)


i支持库列表   支持库注释   
spec特殊功能支持库

回复 支持 反对

使用道具 举报

发表于 2020-11-14 00:21:37 高大上手机用户 | 显示全部楼层   黑龙江省哈尔滨市
会写软件的吗大神
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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