那位高手能帮我解决下在vb下的堆排序问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 03:59:37
我希望将n个数(例如12个数字,都是给出的定值),将他们用堆排序排出来,我坐了很久,老是死循环....崩溃了,加急啊

什么叫堆排序呀?

我平时是这么排序的:

Private Sub Command1_Click()
Dim i%, j%, m%, s(1 To 12)

'先生成这12个数字
Randomize

For i = 1 To 12
s(i) = Int(Rnd * 100 + 1)
Next

Print "排序前:"; Join(s)

'开始排序

For i = 1 To 12
For j = i To 12
If s(j) < s(i) Then
m = s(i)
s(i) = s(j)
s(j) = m
End If
Next
Next

Print "排序后:"; Join(s)
End Sub

堆排序就是把数列做成一个有规律的二叉树再进行排序,这个二叉树可能是大根堆,也可能是小根堆.
排序的时候从底部开始排序,逐步交换字节点和父结点的顺序,直道每个父结点都比字节点大/或者小

'下面是我写的排序过程,对数组数据 Data() 的 y 列
'进行排序,lngRow 表示 数组数据 Data() 行,lngCol
'表示数组数据 Data() 列。
'本过程仅对数组 Data() 数据排序,没有数据输入输出部分。

Public Sub DataOrder(ByVal y As Long)
Dim Temp()
Dim n, m As Long
Dim i, j, k As Long
Dim lngStart, lngStep As Long
'--------------------------------------------------------
'---排序过程--------------------