【模板】二叉堆
vb吧
全部回复
仅看楼主
level 8
冰之源___ 楼主
Public Class Priority_Queue
Friend Element() As Integer
Friend point As Integer ReadOnly Property Top As Integer
Get
Try
Return Element(1)
Catch ex As Exception
Return 0
End Try
End Get
End Property
ReadOnly Property Size As Integer
Get
Return point
End Get
End Property
ReadOnly Property Empty As Boolean
Get
If point = 0 Then Return True
Return False
End Get
End Property Sub push(ByVal _ele_val As Integer)
point += 1
Element(point) = _ele_val
Dim Now As Integer = point
Dim Nxt As Integer = Now / 2
While (Now <> 1 AndAlso Element(Now) > Element(Nxt))
Swap(Element(Now), Element(Nxt))
Now = Nxt
Nxt /= 2
End While
End Sub
Sub pop()
Dim now As Integer = 1 Element(1) = Element(point)
point -= 1 While (1) Dim left As Integer = 0
Dim right As Integer = 0 If (now * 2 <= point) Then
left = Element(now * 2)
End If
If (now * 2 + 1 <= point) Then
right = Element(now * 2 + 1)
End If If (right = left And right = 0) Then
Exit Sub
End If If (Element(now) < left OrElse Element(now) < right) Then
If left > right Then
Swap(Element(now), Element(now * 2))
now *= 2
Else
Swap(Element(now), Element(now * 2 + 1))
now *= 2
now += 1
End If
Else
Exit While
End If
End While End Sub Sub New(ByVal _size As Integer)
ReDim Element(_size)
point = 0
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub End Class
2017年10月21日 10点10分 1
level 8
冰之源___ 楼主
又名优先队列,用来排序可以达到O(n logn)的时间复杂度
鉴于上回有人问我堆排序是什么,而且发现VB学习者对算法了解甚少
所以我手打了一个大根堆
2017年10月21日 10点10分 2
level 8
冰之源___ 楼主
堆排序实现
2017年10月21日 10点10分 3
level 8
冰之源___ 楼主
一万的数据量瞬间实现,只是msgbox打不出来
2017年10月21日 11点10分 4
level 8
冰之源___ 楼主
优先队列【二叉堆】源码结构
2017年10月21日 11点10分 5
level 1
可以请教简单的vb题目吗[微微一笑]
2017年10月21日 11点10分 6
level 15
厉害
2017年10月21日 20点10分 7
level 8
冰之源___ 楼主
自顶
2017年10月23日 13点10分 8
1