求教一个VB排序问题:

来源:百度知道 编辑:UC知道 时间:2024/06/22 14:57:27
一个变量的所有项中的每一项里含有序号和小数,现在要以小数从大到小排列
如:18 0.333 变为:16 0.400
11 0.400
17 0.250 13 0.375
16 0.400 18 0.333
15 0.333 15 0.333
14 0.286 12 0.333
13 0.375 14 0.286
12 0.333 17 0.250
11 0.400
请给出代码,谢谢!

Private Sub Command1_Click()

Dim a(1 To 8) As String
Dim i As Long, j As Long
Dim tmp As String

a(1) = "18 0.333"
a(2) = "17 0.250"
a(3) = "16 0.400"
a(4) = "15 0.333"
a(5) = "14 0.280"
a(6) = "13 0.375"
a(7) = "12 0.333"
a(8) = "11 0.400"

For i = 1 To 7
For j = i + 1 To 8
If GetValue(a(i)) < GetValue(a(j)) Then
tmp = a(i)
a(i) = a(j)
a(j) = tmp
End If
Next
Next

Debug.Print Join(a, vbCrLf)

End Sub

Function GetValue(ByVal s As String) As Double
GetValue = Val(Split(s, Chr(32))(1))
End Function

如果你排序的数量巨大,这个冒泡算法效率太低了,可以考虑用快排或借用recordset对象的sort方法...

Private Type Z