J'essaye d'écrire un algorithme de heapsort et c'est mon code pour cela. Cependant, cela ne fonctionne pas. Lorsque j'essaie d'exécuter la macro, il est dit que l'indice est hors limites et correspond au bit if A(leftchild,1) > A(i,1) then
. Il est dit que les deux i
et leftchild
sont égaux à zéro alors que cela ne devrait pas être le cas, mais je ne sais pas où le changer.Erreur dans l'algorithme de heapsort
Sub MakeMaxHeap(i As Long, heapsize As Long)
Dim LeftChild As Long
Dim RightChild As Long
Dim largest As Long
LeftChild = 2 * i
RightChild = 2 * i + 1
If heapsize > LeftChild Then
If A(LeftChild, 1) > A(i, 1) Then
largest = LeftChild
ElseIf A(LeftChild, 1) = A(i, 1) Then
largest = i
End If
End If
If heapsize > RightChild Then
If A(RightChild, 1) > A(largest, 1) Then
largest = RightChild
ElseIf A(RightChild, 1) = A(largest, 1) Then
largest = i
End If
End If
If largest <> i Then
Call MakeMaxHeap(largest, heapsize)
End If
End Sub
Sub BuildMaxHeap()
Dim i As Long
Dim heapsize As Long
heapsize = n
For i = n/2 To 1 Step -1
Call MakeMaxHeap(i, heapsize)
Next i
End Sub
Sub HeapSort()
Dim i As Long
Dim temp As Double
Dim j As Long
Dim heapsize As Long
Call InitializeA
'This basically stores a
Call BuildMaxHeap
heapsize = n
For i = n To 2 Step -1
temp = A(i, 1)
A(i, 1) = A(1, 1)
A(1, 1) = temp
heapsize = heapsize - 1
Call MakeMaxHeap(1, heapsize)
Next i
For j = 1 To n
Cells(j, 7).Value = A(j, 1)
Next j
End Sub
Où sont les variables 'A' et' n' a déclaré? Sont-ils de niveau module? – YowE3K
Vous devez déclarer 'n' dans la portée, il n'est pas clair ici quelle est sa valeur. À son tour, 'i' est défini à partir de' n', et passé à 'MakeMaxHeap' ... cela fait que' i' est 0, donc 'LeftChild' est 0 ... – Wolfie
@ YowE3K A et N sont déclarés comme variables globales – Mark