递归火山软件开发平台

标题: 呵呵仙_1图教您如何写高效的排序 [打印本页]

作者: 呵呵仙8    时间: 2021-5-13 23:38
标题: 呵呵仙_1图教您如何写高效的排序
本帖最后由 呵呵仙8 于 2021-5-13 23:43 编辑

可能有大神已经想到,交换变量地址下4个字节的数据地址不就OK了?是的,没错!!这是易语言的做法!!
可是火山PC的数据结构和易语言的不同!!交换变量地址下4个字节,完全行不通!!OK,交换整个数据结构
总可以了吧!!别说,好像真可以!!如图:
(, 下载次数: 85)
代码中是以文本型作测试的!!想不到火山PC文本型数据结构64位是88字节这么长,32位是44字节这么长!!
如果按我这种写法的话。易语言优于32位火山优于64位火山!!
现在是知道如何写,才能快起来了!!OK,用在数组身上就能体验到了!!可是火山的是一个数组类,不是易语言的
变量[10000000]这种操作的!!随便加减成员,随便取各成员变量地址!!火山的数组类,行不通!!变量[10]这种又不让加减成员,重定义!!

作者: 大强    时间: 2021-5-14 06:08
习惯了易语言,再来整火山,是很烧脑的
作者: 呵呵仙8    时间: 2021-5-14 09:06
@飞扬工作室
希望增加对数组操作!!还有局部变量数组,”自定义数据“定义到[10000]会立马挂!!
集变量分配三个数组[10000000]。就提示自动分配超过 2G!!不让编译!!
是不是说无论EXE是不是64位,都不可以用超过内存2G?
作者: weilai    时间: 2021-5-14 18:51
这个直接指针操作会不会快一些
作者: 呵呵仙8    时间: 2021-5-14 20:25
weilai 发表于 2021-5-14 18:51
这个直接指针操作会不会快一些

这个不像易语言
作者: hmyroot    时间: 2021-5-22 21:36
本帖最后由 hmyroot 于 2021-5-22 21:39 编辑

感觉火山PC很多操作不如易语言方便,易语言的字节集{1,2,3}、数组[1]、数组[2],火山PC全都不支持算是废了,吴总又不听从用户反馈,老是我行我素,如果有其它中文编程软件吸收易语言的简单高效开发很多人都会抛弃火山。
作者: 创世魂    时间: 2021-5-23 08:26
数组类应该是可以直接升级成那种扩展成员数的。
作者: 呵呵仙8    时间: 2021-5-23 09:55
创世魂 发表于 2021-5-23 08:26
数组类应该是可以直接升级成那种扩展成员数的。

老大您好,你是说现在的数组类中方法可以直接修改!还是以后才打算支持?


作者: weilai    时间: 2021-5-23 20:20
我想说的是,排序在哪里?
作者: weilai    时间: 2021-5-23 20:22
我就看到了一个交换变量,和排序没什么必要关系
作者: 呵呵仙8    时间: 2021-5-23 22:03
weilai 发表于 2021-5-23 20:22
我就看到了一个交换变量,和排序没什么必要关系

可能吧!!
作者: weilai    时间: 2021-5-23 22:54
我觉得取文本地址后,直接指针排序应该比复制内存这种方法快得多
作者: 呵呵仙8    时间: 2021-5-24 09:15
weilai 发表于 2021-5-23 22:54
我觉得取文本地址后,直接指针排序应该比复制内存这种方法快得多

主要不是单一的文本排序!而是自定义结构排序!像把超级列表框各列的项目写在自定义结构中!排序好了再写返出来!

作者: 呵呵仙8    时间: 2021-5-24 09:27
weilai 发表于 2021-5-23 22:54
我觉得取文本地址后,直接指针排序应该比复制内存这种方法快得多

我以前用易语言+七号排序法!用交换数组成员指针方法!用1秒时间就完成了10万项目,从取出项目到排序到写回项目!!就是如果用火山数组类来搞不知能快多少?
作者: 龙纹    时间: 2021-5-25 11:11
我觉得debug模式对比效率没什么意义,这是火山交换变量方法的定义 (, 下载次数: 45)

找到SWAP定义
(, 下载次数: 51)
可以看到就是创建了一个临时变量进行交换,或许你可以试试交换变量与你这么操作在发布版下的效率对比。

作者: 呵呵仙8    时间: 2021-5-25 11:23
龙纹 发表于 2021-5-25 11:11
我觉得debug模式对比效率没什么意义,这是火山交换变量方法的定义

找到SWAP定义

临时变量,有申请内存,释放内存的动作!当然慢啦!
不用编译也能知没交换数据结构来的快!!
作者: 呵呵仙8    时间: 2021-5-25 23:34
龙纹 发表于 2021-5-25 11:11
我觉得debug模式对比效率没什么意义,这是火山交换变量方法的定义

找到SWAP定义

交换结构比交换变量是快的!就是没调试模式下这么夸张!!交换结构60毫秒!
交换变量600毫秒!一样10倍速度左右!!
作者: 龙纹    时间: 2021-5-26 10:28
呵呵仙8 发表于 2021-5-25 23:34
交换结构比交换变量是快的!就是没调试模式下这么夸张!!交换结构60毫秒!
交换变量600毫秒!一样10倍速 ...

嗯, 比交换变量快是肯定的,我昨天想表达的只是在debug下对比一些操作的效率不太好
还有就是我虽然也是按1000W次测试的, 但是测试文本过短, 昨天我测试时差距不大, 5倍左右, 让我误以为效率差别没那么大, 两个测试文本再加长一些差距会更大, 所以得出了昨天的错误结论(那会儿脑抽了, 有点想当然了)

作者: 呵呵仙8    时间: 2021-5-26 11:25
龙纹 发表于 2021-5-26 10:28
嗯, 比交换变量快是肯定的,我昨天想表达的只是在debug下对比一些操作的效率不太好
还有就是我虽然也是按 ...

我把支持库的复制内存的方法又优化了!所以就又快了5倍速度!
作者: 呵呵仙8    时间: 2021-5-26 11:34
龙纹 发表于 2021-5-26 10:28
嗯, 比交换变量快是肯定的,我昨天想表达的只是在debug下对比一些操作的效率不太好
还有就是我虽然也是按 ...

如果是一些自定义数据结构排序的话,用临时变量方式交换的话,所花的时间更长!除非吴总改用交换结构方式!!可以省去大量申请内存等时间!!
作者: weilai    时间: 2021-5-26 13:17
吴总肯定不会这样改的,因为如果操作文本或者自定义结构特别要求效率的话,直接指针操作,速度能快50倍以上(上不封顶),,当然这是我认为的,我没有用c++写过程序,也没有用火山视窗写过程序,但是凭我对指针的了解,那东西相当的快,快到极致
作者: weilai    时间: 2021-5-26 13:18
据说比数组直接取下标还快,你说神奇不
作者: 龙纹    时间: 2021-5-26 13:22
呵呵仙8 发表于 2021-5-26 11:34
如果是一些自定义数据结构排序的话,用临时变量方式交换的话,所花的时间更长!除非吴总改用交换结构方式 ...

我用的是你图片里内存复制精简做的测试。
目前火山的实现简单又正确,但如果高频率调用的话这个方法确实挺好。
作者: 呵呵仙8    时间: 2021-5-26 13:32
龙纹 发表于 2021-5-26 13:22
我用的是你图片里内存复制精简做的测试。
目前火山的实现简单又正确,但如果高频率调用的话这个方法确实 ...

改为嵌入式!你会发现更快!
作者: 呵呵仙8    时间: 2021-5-26 13:50
weilai 发表于 2021-5-26 13:18
据说比数组直接取下标还快,你说神奇不

你看到的就是易语言的优点!但是,吴总认为你们的优点是缺点,这才是神奇之处!你用到火山就知不能用易语言或其它的语言来看火山的数据结构了!!
作者: weilai    时间: 2021-5-26 14:08
火山支持嵌入式的,直接嵌入c代码,肯定无敌




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4