开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 6350|回复: 79
收起左侧

[易语言纯源码] 【首发】【算法介绍】最强文本排序算法!!!!

[复制链接]
结帖率:97% (36/37)
发表于 2022-12-26 18:24:45 | 显示全部楼层 |阅读模式   江西省南昌市
分享源码
界面截图: -
是否带模块: -
备注说明: -
【首发】世上最强文本排序算法!!!!!!!!!!

啰嗦:

罪魁祸首:求个排序算法
https://bbs.125.la/forum.php?mod=viewthread&tid=14758896
(出处: 精易论坛)
@wacy1024
本来没啥,要是针对这一个功能进行写的话,可能真的花不了我一天,顶多半个小时到一个小时就可以搞定
但是,这篇帖子勾起了我n年前的一个突发奇想,不过那时候没时间去写也就渐渐淡忘了,
本来以为,可能顶多一上午就可以写完
但是我尝试了整整四遍,什么 冒泡算法,多维数组+冒泡算法,ASCII码+冒泡算法
最后还是回归了原生的冒泡算法才解决了问题(冒泡算法YYDS!)
然后本贴不光是对源码的分享,我希望我可以在这里讲清我的算法是如何实现的
毕竟结果不重要,重要的算法思路的学习和领悟~
实现:


1. 什么是冒泡算法?
     冒泡算法是一种对数组的排序方法,详细的解释可以去看看其他地方,这里不过多解释

但请注意以下内容都是基于你知道冒泡算法是什么,以及如何写的情况下诉说的

      当然,冒泡算法的写法各有不同(但好像也大同小异)
      这里以以下写法为准
  
子程序名返回值类型公开备 注
数组_排序_冒泡算法_LR 经典的冒泡算法【点赞】
参数名类 型参考可空数组备 注
数组整数型
变量名类 型静态数组备 注
i整数型 
j整数型 
计次循环首 (取数组成员数 (数组) - 1, i)
计次循环首 (取数组成员数 (数组) - i, j)
如果真 (数组 [j] > 数组 [j + 1])  ' 改变符号可使排列顺序相反
交换变量 (数组 [j], 数组 [j + 1])

计次循环尾 ()
计次循环尾 ()
如果你确保能理解以上算法的话就往下读吧   


2. 文本排序应有的机制是什么?
你觉得一般文本排序应该按照什么排序?
“0-9”?“a”-“z”?“A”-“Z”?
不不不
小孩子才做选择,我三个全要!
有重复的咋办?
简单,判断下一级(以下全文的下一级指的是下一个文本,比如 “A1”的第一级文本指的是“A”,第二级文本指的是“1”
好吧,说起来简单做起来难..
3. 实现
只讲成功的方案(四尝;以下出现的 一尝,二尝,三尝之类的对应第一次尝试,第二次尝试..因为不想删代码所以我就留在那了,最后成功可以使用的是四尝~)
首先,按照 “0-9” “a”-“z” “A”-“Z” 的方式排序,非常简单,直接冒泡算法,但是判断大小的时候只判断数组[j]的第一个文本,然后交换变量时交换一整个成员即可~
这一点我只花了不到半个小时(还是边上网课边写的)
但问题来了,第二级文本应该如何搞?
(群里有人说模仿第一级文本直接排序~,但是用脚丫子都能想出来排序了第二级的话第一级一定会出问题)
我也是在这一点上卡了好久好久好久好久,然后想到了利用多维数组,将数字,小写字母,大写字母分成一类并且存进指定维进行排序~(二尝)
其实这离标准答案很接近了,但是那个时候没想到【苦笑】
利用多维数组有什么坏处?
不治标不治本,就算是分成一类进行排序,但是 类似“A1’这种出现了两个不同的类型且在不同级的文本直接就废了
万幸的是写到一半我就意识到了这个问题,然后停了
又有人建议我用 ASCII码进行判断(三尝)
确实可以,仅限单级
遇到的问题还是和三尝一样~
然后我就抛开所有的不谈,重新尝试 一尝 其实 二尝 和 三尝 给了我很大的思路建议,所以我就单开了四尝
前半段单级排序我直接把一尝的给扣下来了
后半段我则是模仿了 二尝 进行分类
不过,并没有用多维数组
将数组分为 四大类 “0-9” “a”-“z” “A”-“Z” 以及其它无法排序的文本
怎么分的类?
在一尝的单级算法中
因为这四大类的冒泡排序可以说是毫不相干的
这就导致这四大类算是在自己排序自己的不管其它成员啥事,那么他们相对于自己的位置来讲是排序了的,相对整个数组来讲还是一锅粥(自己调试输出理解一下这句话)
那么后面我就需要单独将这四大类提取出来,按照一定的顺序拼接回去(直接看源码很好理解的)
停,
我就需要单独将这四大类提取出来

emm这不巧了嘛
我们将 一尝的代码进行修改
加入一个叫 序号 的参数(理解为需要排序的文本层级)
在”单独将这四大类提取出来“时,进行判断
如果 其中一个类中出现了一个数据的长度是大于当前操作层级的
那么,就再次调用此子程序,不过传进去的参数是 当前操作层级+1 即下一层级
这样就可以限制他 只对此类中的下一级文本进行操作
所以其实就这么简单
我一直都没想到整个点【服】
最后总结一下
已实现功能:



“0-9” “a”-“z” “A”-“Z”进行排序,如果排序中有重复的则排序下一级数组
比如
{ “A1”, “C5”, “B4”, “0A”, “A2”, “A3”, “E5”, “A4” }
被排序为
{“0A”,“A1”,“A2”,“A3”,“A4”,“B4”,“C5”,“E5”}
数字>小写字母>大写字母
本质上是一种仿windows对文件的排序
但是与其规则又有所不同
源码下载:

排序.rar (9.5 KB, 下载次数: 132)

点评

精易模块的【数组_排序】,跟csdn上的算法类似   广东省东莞市  发表于 2022-12-31 12:38

评分

参与人数 2好评 +2 精币 +5 收起 理由
易语言资源网 + 1 + 3 开源精神必须支持~
sinewtec + 1 + 2 支持开源~!感谢分享

查看全部评分


结帖率:97% (36/37)

签到天数: 4 天

 楼主| 发表于 2022-12-26 18:31:51 | 显示全部楼层   江西省南昌市
最后少了一句
在 数组_排序_win_四尝 那里加一句
.版本 2
.如果真 (排序方式)
    数组_反转 (数组)
数组_排序_win_四尝_辅助 里的 排序方式这个参数可以废了

点评

精易模块的【数组_排序】,跟csdn上的算法类似   广东省东莞市  发表于 2022-12-31 12:38
回复 支持 反对

使用道具 举报

结帖率:78% (70/90)

签到天数: 5 天

发表于 2022-12-26 18:44:57 | 显示全部楼层   河北省廊坊市
说真的,冒泡排序的时间复杂度和空间复杂度只是一般般水平。没记错的话,论坛是禁止标题党的。
回复 支持 反对

使用道具 举报

结帖率:97% (36/37)

签到天数: 4 天

 楼主| 发表于 2022-12-26 18:46:40 | 显示全部楼层   江西省南昌市
元老 发表于 2022-12-26 18:44
说真的,冒泡排序的时间复杂度和空间复杂度只是一般般水平。没记错的话,论坛是禁止标题党的。 ...

我这属于标题党吗?又不是光是冒泡算法,这玩意我研究一天了qwq
回复 支持 反对

使用道具 举报

结帖率:78% (70/90)

签到天数: 5 天

发表于 2022-12-26 18:48:59 | 显示全部楼层   河北省廊坊市
StarAdmire 发表于 2022-12-26 18:46
我这属于标题党吗?又不是光是冒泡算法,这玩意我研究一天了qwq

哈哈,毕竟算法这东西很吃数学能力,不过一般认为Timsort排序最优解。
回复 支持 反对

使用道具 举报

结帖率:77% (53/69)

签到天数: 20 天

发表于 2022-12-26 19:04:27 | 显示全部楼层   湖北省武汉市
6666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:80% (57/71)

签到天数: 18 天

发表于 2022-12-26 19:11:06 | 显示全部楼层   广东省深圳市
啥时候收录到懒人模块?
回复 支持 反对

使用道具 举报

签到天数: 16 天

发表于 2022-12-26 19:11:10 | 显示全部楼层   广东省东莞市
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:70% (14/20)

签到天数: 16 天

发表于 2022-12-26 19:28:35 | 显示全部楼层   河南省郑州市
想法挺好的  ,不过思而不学则罔 ,适当抄一抄别人的代码也是学习的一种途径嘛
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2022-12-26 19:29:48 | 显示全部楼层   河北省石家庄市
这个强大,支持一下
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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