小一 发表于 2023-12-26 09:48:20

易语言实现框架排序器举例,自定义数据的快速排序源码

底层算法都已经写好了,基本数据类型的排序器也有了,缺少一个自定义数据类型,
由于我没有骚操作,教大家如何老老实实对【自定义数据】进行排序。

1、私有成员的类型
2、重构你的【比较】函数,我这里举了个例子,是先对参数二排序,再对参数三排序。
.版本 2

.程序集 排序器_自定义数据, 抽象排序器, , 一定得填上基类
.程序集变量 m_data, 自定义数据, , "0"
.程序集变量 m_save, 自定义数据

.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用



.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用



.子程序 排序, , 公开
.参数 p_排序算法实现, 抽象排序算法, 参考, 本参数要求提供"抽象排序算法"的实现类
.参数 p_欲排序的数组, 自定义数据, 参考 数组
.参数 p_升序排列, 逻辑型
.局部变量 l_p2int_this, 整数型
.局部变量 l_this, 抽象排序器

l_p2int_this = 指针到整数 (类自身 ())
Exchange (l_p2int_this, l_this, p_欲排序的数组, m_data)
.如果 (p_升序排列)
    p_排序算法实现.p_升序排列 (取数组成员数 (m_data), l_this)
.否则
    p_排序算法实现.p_降序排列 (取数组成员数 (m_data), l_this)
.如果结束
Exchange (l_p2int_this, l_this, p_欲排序的数组, m_data)

.子程序 去重复, , 公开
.参数 p_排序算法实现, 抽象排序算法, 参考, 本参数要求提供"抽象排序算法"的实现类
.参数 p_欲排序的数组, 自定义数据, 参考 数组
.局部变量 l_p2int_this, 整数型
.局部变量 l_this, 抽象排序器

l_p2int_this = 指针到整数 (类自身 ())
Exchange (l_p2int_this, l_this, p_欲排序的数组, m_data)
p_排序算法实现.p_去重复 (取数组成员数 (m_data), l_this)
Exchange (l_p2int_this, l_this, p_欲排序的数组, m_data)

.子程序 比较, 整数型, 公开
.参数 p_data1, 自定义数据
.参数 p_data2, 自定义数据

.判断开始 (p_data1.参数二 > p_data2.参数二 或 p_data1.参数二 = p_data2.参数二 且 p_data1.参数三 > p_data2.参数三)
    返回 (1)
.判断 (p_data1.参数二 = p_data2.参数二 且 p_data1.参数三 = p_data2.参数三)
    返回 (0)
.默认
    返回 (-1)
.判断结束


.子程序 p_比较成员, 整数型, 公开, 已经重写此方法,本方法仅供排序算法自动调用。返回说明:比较值1>比较值2,返回1;比较值1=比较值2,返回0;比较值1<比较值2,返回-1
.参数 被比较的成员下标, 整数型, , 即前一比较值
.参数 作用比较的成员下标, 整数型, , 即后一比较值

返回 (比较 (m_data [被比较的成员下标], m_data [作用比较的成员下标]))

.子程序 p_交换成员, , 公开, 已经重写此方法,并且子类必须重写此方法,本方法仅供排序算法自动调用。使用说明:本命令用于强制交换对象
.参数 欲交换的成员下标, 整数型
.参数 作交换的成员下标, 整数型

ASM_交换_变量交变量 (m_data [欲交换的成员下标], m_data [作交换的成员下标])

.子程序 p_覆写成员, , 公开, 本命令用于覆写成员
.参数 被覆写的成员, 整数型

m_data [被覆写的成员] = m_save

.子程序 p_临时保存成员, , 公开, 本命令用于保存临时成员
.参数 被保存的成员, 整数型

m_save = m_data [被保存的成员]

.子程序 p_比较临时成员, 整数型, 公开, 本命令用于比较临时成员和其他成员的大小
.参数 欲比较的成员下标, 整数型

返回 (比较 (m_data [欲比较的成员下标], m_save))

.子程序 p_删除成员, , 公开, 本命令用于去重复中删除成员
.参数 欲删除的成员下标, 整数型

删除成员 (m_data, 欲删除的成员下标, )
.版本 2
.支持库 spec

.局部变量 局_排序器, 排序器_自定义数据
.局部变量 局_数据, 自定义数据, , "0"
.局部变量 i, 整数型
.局部变量 n, 整数型

置随机数种子 ()
n = 100
重定义数组 (局_数据, 假, n)
.计次循环首 (n, i)
    局_数据 <i>.参数一 = “数据” + 到文本 (i)
    局_数据 <i>.参数二 = 取随机数 (, ) ÷ 32767
    局_数据 <i>.参数三 = 取随机数 (, )
.计次循环尾 ()

局_排序器.排序 (快速排序_ASM, 局_数据, 真)' 先按参数二排序,再按参数三

调试输出 (“排序后”)
.计次循环首 (n, i)
    调试输出 (局_数据 <i>.参数一, 局_数据 <i>.参数二, 局_数据 <i>.参数三)
.计次循环尾 ()

**** Hidden Message *****

光光 发表于 2023-12-26 20:22:43

谢谢分享好人有好报6666666

卧槽你妹 发表于 2023-12-27 06:57:06

阿斯蒂芬撒反对

zzq6689@qq.com 发表于 2023-12-27 17:31:28

我今天才找到这个论坛,非常高兴,加入到觅风老师的论坛

zzq6689@qq.com 发表于 2023-12-28 04:05:51

这就是传说中的好资源吗?赶紧看看去!

文杰 发表于 2023-12-28 14:40:13

碉堡了!

阿运 发表于 2023-12-28 20:12:23

我知道错了,感谢大神分享

光光 发表于 2023-12-29 01:44:33

还不错觅风论坛欢迎你

gwm231 发表于 2023-12-29 07:16:43

的法国风格化规范化

wz19981007 发表于 2023-12-29 12:48:53

看看看看看看看看看看看看
页: [1] 2 3 4 5 6
查看完整版本: 易语言实现框架排序器举例,自定义数据的快速排序源码