易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

【算法】文本排序算法   [复制链接]

    2023-01-05 08:34:46
    模块控件源码
    易语言资源网
    1813 次浏览
    来源链接

实现:


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对文件的排序

但是与其规则又有所不同

image.png



点我下载 (已有 88 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
排序.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:极简代码打造简易HTTP服务器 异步完成...     下一篇:curl7.87.1(openssl、s...