求VB二维数组排序代码
我用二维数组a(25000,1)存储一系列坐标值(x,y),a(i,0)存储x值,a(i,1)存储y值,i是从0到25000的数。急需一段VB二维数组排序代码,按照x值由...
我用二维数组a(25000,1)存储一系列坐标值(x,y),a(i,0)存储x值,a(i,1)存储y值,i是从0到25000的数。急需一段VB二维数组排序代码,按照x值由大到小排序(x与y的对应关系不变)......我是现学编程的,急需............用冒泡发的话太慢了,需求快速排序....我刚学编程.........急急急急急急
展开
3个回答
展开全部
Dim arr(25000, 1) As Single
'这是一个测试实例,需要在窗口中添加一个List控件。
Private Sub Form_Load()
'初始化数组内的数据,随机填写
Dim i As Integer
For i = 0 To 25000
arr(i, 0) = Rnd * 1000
arr(i, 1) = Rnd * 800
Next
'调用快速排序过程,效率比冒泡高许多
Call QuickSort(arr, 0, 25000)
'将排序后的数组显示成List中,以便验证
For i = 0 To 25000
List1.AddItem Format(arr(i, 0), "0.000") & vbTab & Format(arr(i, 1), "0.000")
Next
End Sub
'二维数组快速排序的算法,如果你的x,y的数值类型不是Single,请按实际情况把下面的Single改为相应数值类型
Sub QuickSort(MyArray() As Single, L, R)
Dim i As Integer, j As Integer, X As Single, Y As Single, M As Single
i = L
j = R
'找出数组的中点
M = MyArray((L + R) / 2, 0)
While (i <= j)
'找出比中点大的数
While (MyArray(i, 0) < M And i < R)
i = i + 1
Wend
'找出比中点小的数
While (M < MyArray(j, 0) And j > L)
j = j - 1
Wend
'互换这两个数
If (i <= j) Then
X = MyArray(i, 0)
Y = MyArray(i, 1)
MyArray(i, 0) = MyArray(j, 0)
MyArray(i, 1) = MyArray(j, 1)
MyArray(j, 0) = X
MyArray(j, 1) = Y
i = i + 1
j = j - 1
End If
Wend
'未完成时递归调用
If (L < j) Then Call QuickSort(MyArray(), L, j)
If (i < R) Then Call QuickSort(MyArray(), i, R)
End Sub
'这是一个测试实例,需要在窗口中添加一个List控件。
Private Sub Form_Load()
'初始化数组内的数据,随机填写
Dim i As Integer
For i = 0 To 25000
arr(i, 0) = Rnd * 1000
arr(i, 1) = Rnd * 800
Next
'调用快速排序过程,效率比冒泡高许多
Call QuickSort(arr, 0, 25000)
'将排序后的数组显示成List中,以便验证
For i = 0 To 25000
List1.AddItem Format(arr(i, 0), "0.000") & vbTab & Format(arr(i, 1), "0.000")
Next
End Sub
'二维数组快速排序的算法,如果你的x,y的数值类型不是Single,请按实际情况把下面的Single改为相应数值类型
Sub QuickSort(MyArray() As Single, L, R)
Dim i As Integer, j As Integer, X As Single, Y As Single, M As Single
i = L
j = R
'找出数组的中点
M = MyArray((L + R) / 2, 0)
While (i <= j)
'找出比中点大的数
While (MyArray(i, 0) < M And i < R)
i = i + 1
Wend
'找出比中点小的数
While (M < MyArray(j, 0) And j > L)
j = j - 1
Wend
'互换这两个数
If (i <= j) Then
X = MyArray(i, 0)
Y = MyArray(i, 1)
MyArray(i, 0) = MyArray(j, 0)
MyArray(i, 1) = MyArray(j, 1)
MyArray(j, 0) = X
MyArray(j, 1) = Y
i = i + 1
j = j - 1
End If
Wend
'未完成时递归调用
If (L < j) Then Call QuickSort(MyArray(), L, j)
If (i < R) Then Call QuickSort(MyArray(), i, R)
End Sub
追问
非常感谢!你给的是按x值从小到大排序的,但是只要把里面的MyArray(i, 0) 就可以了。非常感谢!
展开全部
问题补充:就象在EXCEL中一样,第一排序条件为:B,降序;第二条件为:A,升序;。 坚决拿下这200分!这是个完整的程序,包括输入和输出部分。 #,zCbThX
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考资料: http://social.microsoft.com/Forums/nl-NL/vbasiczhchs/thread/6e70f44c-9d62-4b5b-a78f-2bbaeda99f41
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询