VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: Jen

VB业界最快的Sorting大比拼

[复制链接]
发表于 2015-5-26 11:24:17 | 显示全部楼层
@仙剑魔  请看我的工程,应该Debug.Print不会影响执行时间吧。
@menglv 关于代码的正确性,其实很简单,在他的过程里排完之后再循环对比一下即可。
arr(i) <= arr(i+1)

点评

输出文本到文件,编译成EXE,再测试速度  发表于 2015-5-26 12:22
Debug.Print说明你就是在DEBUG跑,这种环境肯定是msvcrt 快的,因为他是release的  发表于 2015-5-26 12:21
回复 支持 反对

使用道具 举报

发表于 2015-5-26 12:19:42 | 显示全部楼层
本帖最后由 menglv 于 2015-5-26 12:23 编辑

If VerifyResults Then FillArray ArrVerify, FillMode: ShellSort ArrVerify, 0, UBound(ArrVerify) '这个排序结果是正确的

If VerifyResults Then For i = 0 To UBound(Arr): Debug.Assert Arr(i) = ArrVerify(i): Next  '这句是验证数据的正确性,不对会暂停程序,并显示数据

bucketsort排序

点评

我也是刚刚知道有这个功能,一直没有用过。  发表于 2015-5-26 12:24
这是debug断言,只要debug没断就说明结果正确  发表于 2015-5-26 12:23
回复 支持 反对

使用道具 举报

发表于 2015-5-26 12:46:32 | 显示全部楼层
@仙剑魔
没想到你的算法编译后这么强大,特别是QSort2,基本都已经赶超msvcrt了
不过主要是我平时应用VB都是在VBA IDE环境,不像vb6,可以编译优化。

点评

vb比较奇葩的地方在于,数组是安全数组,即使简单的下标(i)也会消耗时间,所以我之前说代码越简单越好  发表于 2015-5-26 21:15
一般老爷机是内存比较小,需要额外内存的算法比如HeapSort影响会比较大  发表于 2015-5-26 21:09
如果数据不是上百万,我想随便一种排序方法即可.  发表于 2015-5-26 18:51
回复 支持 反对

使用道具 举报

发表于 2015-5-28 13:09:41 | 显示全部楼层
本帖最后由 menglv 于 2015-5-28 20:36 编辑

经测试,在vc环境里qsort也是跟vb的那个call qsort速度差不多,而且编译成debug还更慢了一点点。
int cmp(const void *x,const void *y)
        {
                return *(int*)x-*(int*)y;
        }
qsort(a,200000,sizeof(a[0]),cmp);

耗时403毫秒,而vb的那个是363毫秒.
编译成release后速度有比较大的提升296ms。

不过这个qsort好像并不是msvcrt.qsort
成功用vc调用msvcrt.qsort成功,速度跟上面的qsort是一样的,但是反汇编的代码不一样。

明天试试vb+asm调用msvcrt.qsort看看。

点评

vc还可以试试std::sort记得比qsort快来着...  发表于 2015-6-8 14:14
回复 支持 反对

使用道具 举报

发表于 2015-6-7 09:44:02 | 显示全部楼层
menglv 发表于 2015-5-28 13:09
经测试,在vc环境里qsort也是跟vb的那个call qsort速度差不多,而且编译成debug还更慢了一点点。
int cmp( ...

打算还优化一下?
回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-2-3 15:35

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表