2015-03-06 2 views
0

Я борюсь с поиском алгоритма сортировки, который может сортировать столбцы многомерного массива. Все столбцы должны сортироваться по отдельности (по возрастанию) без ссылки на другие столбцы. Я попытался использовать код, предложенный в этой теме: 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 
+0

Не могли бы вы показать нам остальную часть вашего кода? –

+0

Я добавил код. –

+0

Является ли это предназначенным «Образцы (N, M) = sev_expo (teta, threshold)»? Я имею в виду, что я не вижу, чтобы значение в массиве менялось, когда вы выполняете цикл, потому что тета и порог не меняются внутри цикла. – shahkalpesh

ответ

0

Если нашли EROR в моем коде. Я должен был хранить образцы в samples(teller_N, teller_M) вместо samples(N, M). Действительно глупо, но это происходит, когда вы работаете слишком долго ...

Так что теперь он работает так, что сортирует мои столбцы, но не независимо друг от друга. Есть ли простой способ изменить код? Или я должен использовать один столбец во время версии?