我正在努力寻找可以对多维数组的列进行排序的排序算法。所有列都应单独排序(升序),而不与其他列链接。我试图使用此主题中提出的代码:Sorting a multidimensionnal array in VBA
但我得到的是最后一列中最后一个条目的值。例如,如果第一列是(3,5,1,9),第二列是(5,4,8,1),那么我get在整个数组中都是1。我想要的是第一列中的(1,3,5,9)和第二列中的(1,4,5,8)。
我使用以下命令调用sort算法: QuickSortArray Arraytosort ,, 1,
对第一列进行排序。计划是稍后进行循环以对所有列进行排序。
我有两个问题:
我做错了什么?
我可以在第一时间使用此代码解决此问题吗?还是需要调整?
这是到目前为止的代码:
Sub P_Values()
Dim threshold As Long 'threshold
Dim N As Long 'number of samples
Dim M As Long 'number of sims
N = Cells(2, 2)
M = Cells(3, 2)
ReDim Samples(N, M) 'array to store samples
ReDim CM(M)
Dim teller_N As Long 'counter sample
Dim teller_M As Long 'counter sims
Dim teta As Double 'teta parameter
teta = Cells(3, 6)
threshold = Cells(1, 2)
'generate samples
For teller_M = 1 To M
For teller_N = 1 To N
Samples(N, M) = sev_expo(teta, threshold)
Cells(6 + teller_N, 1 + teller_M).Value = Samples(N, M)
Next
Next
'sort sims
QuickSortArray Samples(), , , 1
来自函数sev_expo的代码:
Function sev_expo(ByVal teta As Double, ByVal threshold As Long) As Long
Dim U As Double
U = Rnd
sev_expo = -teta * Log(1 - U) + threshold
End Function
答案 0 :(得分:0)
如果在我的代码中找到了错误。我应该将样本存储在samples(teller_N, teller_M)
而不是samples(N, M)
中。真的很愚蠢,但是当你工作太久时就会发生......
所以现在它的工作方式是对列进行排序,但不能彼此独立。有没有一种简单的方法来改变代码?或者我应该每次使用一列?