导读
易语言5.6完美版,可静态编译,绿色无后门

学习易语言 讲究的是系统,如果你正在四处闲逛,你懂的永远是皮毛! 觅风论坛正在为每个困惑的对易语言 详细

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

[复制链接]

微信扫一扫 分享朋友圈

小一 发表于 2023-12-26 09:48:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多易友,享用更多功能,让你轻松玩转觅风论坛。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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



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



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

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

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

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

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

  33. .判断开始 (p_data1.参数二 > p_data2.参数二 或 p_data1.参数二 = p_data2.参数二 且 p_data1.参数三 > p_data2.参数三)
  34.     返回 (1)
  35. .判断 (p_data1.参数二 = p_data2.参数二 且 p_data1.参数三 = p_data2.参数三)
  36.     返回 (0)
  37. .默认
  38.     返回 (-1)
  39. .判断结束


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

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

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

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

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

  50. m_data [被覆写的成员] = m_save

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

  53. m_save = m_data [被保存的成员]

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

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

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

  59. 删除成员 (m_data, 欲删除的成员下标, )
复制代码
  1. .版本 2
  2. .支持库 spec

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

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

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

  16. 调试输出 (“排序后”)
  17. .计次循环首 (n, i)
  18.     调试输出 (局_数据 <i>.参数一, 局_数据 <i>.参数二, 局_数据 <i>.参数三)
  19. .计次循环尾 ()
复制代码


游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

精彩评论55

光光 发表于 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 | 显示全部楼层
看看看看看看看看看看看看
回复 支持 反对

使用道具 举报

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

本版积分规则

关注我们:觅风论坛与你快乐分享

收藏本站

用心服务做个非盈利公益编程网站

www.eyyba.com

服务人:觅风论坛

Email:eyyba@foxmail.com

Powered by WWW.EYYBA.COM X3.4© 2001-2023 Inc.   版权所有   

觅风论坛  疆ICP备15020893号-1