【发布时间】:2017-07-25 03:25:21
【问题描述】:
我正在尝试编写一个堆排序算法,这是我的代码。但是,它不起作用。当我尝试运行宏时,它说下标超出范围,它对应于if A(leftchild,1) > A(i,1) then 位。它说i 和leftchild 都等于零,但我不知道在哪里更改它。
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在哪里声明?它们在范围内是模块级别的吗? -
你需要在范围内声明
n,这里不清楚它的值是什么。反过来,i从n设置,并传递给MakeMaxHeap...这导致i为0,所以LeftChild为0... -
@YowE3K A 和 N 被声明为全局变量
-
@Wolfie A 和 N 被声明为全局变量。 n 是单元格 B2 中给出的值
标签: algorithm excel sorting heapsort vba