| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1699 人关注过本帖
标题:求助!!请问对一维数组排序报溢出堆栈空间错误怎么修改?
只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
回复 10楼 冬瓜汤
前辈您好,我将您的程序带入我的数据中测试,大约近20万数据,的确不溢出了,谢谢!但是有个问题还需要请教:
您的程序针对数据类型为long时,排序是正确的,但如果数据类型是doubles时,排序仅对整数部分有效,对小数部分无效(我把数组、a、b三处的数据类型修改成doubles了),结果如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册


您帮忙看一下,我程序里哪里写错了或者哪里还需要做出修改的,麻烦请告之,谢谢。

附,我将您的程序带入我的数据中测试的源码:
数据测试.rar (3.77 MB)
2023-02-20 23:07
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
回复 10楼 冬瓜汤
前辈您好,我更换了一种排序方式,比您的方法速度慢了一些,但大约20万的数据也不会报溢出了,Double数据格式排序顺序也是正确了,现向您汇报一下,谢谢您的孜孜不倦的教导,让我对VB的编程技巧有了更深入的了解,谢谢您。
附,修改过的程序。
数据测试-2.rar (3.77 MB)

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2023-2-21 10:25编辑过]

2023-02-21 10:23
冬瓜汤
Rank: 2
等 级:论坛游民
威 望:1
帖 子:18
专家分:75
注 册:2023-1-30
收藏
得分:0 
@11楼
你说的是对的。quicksort() 对浮点数或currency 排序,不能正确排序。关键问题是出在 comparator上面。改成下面的代码:
Public Function Comparator CDecl(ByRef a _
                 As Double, ByRef b _
                 As Double) As Long
    Comparator = IIf((a - b) > 0, 1, -1)
End Function
注意:对于浮点数或currency,用IIF(),返回 1或-1 这样的long值,只用1,-1这两个值!
虽然会影响性能,如20万long排序 182毫秒左右,20万double或currency排序是359毫秒左右,但还是在可承受范围。
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2023-2-21 10:32编辑过]

2023-02-21 10:29
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
回复 13楼 冬瓜汤
前辈您好,还有一个问题想请教一下:
您可以看到我提供的数据CSV里有很多参数,除去b(19)列外,我还需要对我还要分别对b(18)列,b(22)列,b(15)列,b(13)列,b(11)列分别读到数组a2_sj、a3_sj、a4_sj、a5_sj、a6_sj里,然后排序,然后输出到各个不同的文件里,重复调用语句:
qsort a1_sj(1), pass_num, LenB(a4_sj(1)), AddressOf Comparator

qsort a2_sj(1), pass_num, LenB(a4_sj(1)), AddressOf Comparator

qsort a3_sj(1), pass_num, LenB(a4_sj(1)), AddressOf Comparator

qsort a4_sj(1), pass_num, LenB(a4_sj(1)), AddressOf Comparator

qsort a5_sj(1), pass_num, LenB(a4_sj(1)), AddressOf Comparator

qsort a6_sj(1), pass_num, LenB(a4_sj(1)), AddressOf Comparator

发现排序越来越慢,然后会报错,这种情况怎么解决?

附:新修改的程序。
数据测试-3.rar (3.77 MB)
2023-02-21 17:01
快速回复:求助!!请问对一维数组排序报溢出堆栈空间错误怎么修改?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037967 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved