一个达人编写的排序码,
但是连声明都懒的声明
不知是否是传说中最快的排序法。
请高人把代码解释一下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

解决方案 »

  1.   

    做点补充'请问高人把L,和 R 传进的是什么参数?
    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
      

  2.   

    自我解决,散分
    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
      

  3.   

    这是一段快速排序代码,还请教qiu5208 :
    这段代码能修改一下,改成对二位数组的排序吗,谢谢!!!
      

  4.   

    这个排序,记得以前CSDN上有过讨论
      

  5.   


    回楼上二维确实能排序见此贴:
    http://topic.csdn.net/u/20080308/19/2993fbbf-fcbd-4aa4-a344-cf7489438f6b.html
      

  6.   

    阿勇,我看了楼主的另外一个贴,最后弄月白楼主的意思是将第二维做“列”来使用,对其中某个"列"来排序:比如:
    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)然后按第二维的某个序号中元素的大小排序