一个达人编写的排序码,
但是连声明都懒的声明
不知是否是传说中最快的排序法。
请高人把代码解释一下Sub QuickSort(MyArray(), L, R)
Dim I, J, X, Y I = L
J = R
X = MyArray((L + R) / 2)
While (I <= J)
While (MyArray(I) < X And I < R)
I = I + 1
Wend
While (X < MyArray(J) And J > L)
J = J - 1
Wend
If (I <= J) Then
Y = MyArray(I)
MyArray(I) = MyArray(J)
MyArray(J) = Y
I = I + 1
J = J - 1
End If
gIterations = gIterations + 1
Wend If (L < J) Then Call QuickSort(MyArray(), L, J)
If (I < R) Then Call QuickSort(MyArray(), I, R)End Sub
但是连声明都懒的声明
不知是否是传说中最快的排序法。
请高人把代码解释一下Sub QuickSort(MyArray(), L, R)
Dim I, J, X, Y I = L
J = R
X = MyArray((L + R) / 2)
While (I <= J)
While (MyArray(I) < X And I < R)
I = I + 1
Wend
While (X < MyArray(J) And J > L)
J = J - 1
Wend
If (I <= J) Then
Y = MyArray(I)
MyArray(I) = MyArray(J)
MyArray(J) = Y
I = I + 1
J = J - 1
End If
gIterations = gIterations + 1
Wend If (L < J) Then Call QuickSort(MyArray(), L, J)
If (I < R) Then Call QuickSort(MyArray(), I, R)End Sub
Sub QuickSort(MyArray(), L, R)
'各个变量各指什么?
Dim I, J, X, Y I = L
J = R
X = MyArray((L + R) / 2)
While (I <= J)
While (MyArray(I) < X And I < R)
I = I + 1
Wend
While (X < MyArray(J) And J > L)
J = J - 1
Wend
If (I <= J) Then
Y = MyArray(I)
MyArray(I) = MyArray(J)
MyArray(J) = Y
I = I + 1
J = J - 1
End If
gIterations = gIterations + 1
Wend
'用了传说中的递归。
If (L < J) Then Call QuickSort(MyArray(), L, J)
If (I < R) Then Call QuickSort(MyArray(), I, R)End Sub
Private Sub Command1_Click()
Dim a(10000) As Long
Dim ii As Long
For ii = 0 To 10000
a(ii) = Fix(10000 * Rnd + 10)
NextCall QkSort(a, 0, UBound(a))
For ii = 0 To UBound(a)
Debug.Print a(ii)
NextEnd Sub
'升序快速排序法
Sub QkSort(Ay() As Long, Io As Long, Jo As Long)Dim I As Long, J As Long, X As Long, tp As Long
Dim bQ As Boolean 'i到j跳跃开关
'初始化
I = Io
J = Jo
X = Ay(I)
'一轮排序
Do While I < J
If Not bQ Then
If Ay(J) < X Then
tp = Ay(J): Ay(J) = Ay(I): Ay(I) = tp
bQ = True
Else
J = J - 1
End If
Else
If Ay(I) > X Then
tp = Ay(J): Ay(J) = Ay(I): Ay(I) = tp
bQ = False
Else
I = I + 1
End If
End If
Loop
'递归
If I < Jo Then QkSort Ay, J + 1, Jo '注意靠后的要加1
If Io < J Then QkSort Ay, Io, I
End Sub
这段代码能修改一下,改成对二位数组的排序吗,谢谢!!!
回楼上二维确实能排序见此贴:
http://topic.csdn.net/u/20080308/19/2993fbbf-fcbd-4aa4-a344-cf7489438f6b.html
dim a(2,2)这样展示数据:
a(0,0),a(0,1),a(0,2)
a(1,0),a(1,1),a(1,2)
a(2,0),a(2,1),a(2,2)然后按第二维的某个序号中元素的大小排序