Я борюсь с поиском алгоритма сортировки, который может сортировать столбцы многомерного массива. Все столбцы должны сортироваться по отдельности (по возрастанию) без ссылки на другие столбцы. Я попытался использовать код, предложенный в этой теме: Sorting a multidimensionnal array in VBAСортировка столбцов многомерного массива в VBA
Но все, что я получаю, это значение из последней записи в последнем столбце. Например, если первый столбец (3, 5, 1, 9) и второй столбец (5, 4, 8, 1), все, что я получаю, это 1 во всем массиве. То, что я хочу, это (1, 3, 5, 9) в первом столбце и (1, 4, 5, 8) во втором.
Я называю сортировки Алгоритм Построения с помощью следующей команды: 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
Не могли бы вы показать нам остальную часть вашего кода? –
Я добавил код. –
Является ли это предназначенным «Образцы (N, M) = sev_expo (teta, threshold)»? Я имею в виду, что я не вижу, чтобы значение в массиве менялось, когда вы выполняете цикл, потому что тета и порог не меняются внутри цикла. – shahkalpesh