我正在嘗試編寫一個heapsort算法,這是我的代碼。但是,它不起作用。當我嘗試運行宏時,它表示下標超出範圍,它對應於if A(leftchild,1) > A(i,1) then
位。它說i
和leftchild
都等於零,但情況並非如此,但我不知道要在哪裏更改它。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
哪裏變量A''和'N'申報?它們是否在模塊級別上? – YowE3K
你需要在範圍內聲明'n',這裏不清楚它的價值是什麼。反過來,'i'從'n'設置,並傳遞給'MakeMaxHeap' ...這導致'i'爲0,所以'LeftChild'爲0 ... – Wolfie
@YowE3K A和N聲明爲全局變量 – Mark