急需快速排序(非递归)的源代码,算法也行,哪位大虾有,希望能发给我,在此谢过了~~~~~~~~~~~

解决方案 »

  1.   

    CRT里面不是有源代码么,可惜是C的
      

  2.   

    '冒泡算法
    Public Sub BubbleSort(List() As Double)    Dim First As Double, Last As Double
        Dim i As Integer, j As Integer
        Dim Temp As Double
        
        First = LBound(List)
        Last = UBound(List)
        
        For i = First To Last - 1
            For j = i + 1 To Last
                If List(i) > List(j) Then
                    Temp = List(j)
                    List(j) = List(i)
                    List(i) = Temp
                End If
            Next j
        Next i
        
    End Sub
      

  3.   

    '快速排序法
    Sub QuickSort(List() As Double)
    Dim i As Double, j As Double, b As Double
    Dim l As Double, t As Double, r As Double, d As Double
    Dim p(1 To 100) As Double
    Dim w(1 To 100) As Double
    k = 1
    p(k) = LBound(List)
    w(k) = UBound(List)
    l = 1: d = 1
    r = UBound(List)
    Do
    toploop:
    If r - l < 9 Then GoTo bubsort
    i = l: j = r
    While j > i
    comp = comp + 1
    If List(i) > List(j) Then
    swic = swic + 1
    t = List(j)
    oldx1 = List(j)
    oldy1 = j
    List(j) = List(i)
    oldx2 = List(i)
    oldy2 = i
    newx1 = List(j)
    newy1 = j
    List(i) = t
    newx2 = List(i)
    newy2 = i
    d = -d
    End If
    If d = -1 Then
    j = j - 1
    Else
    i = i + 1
    End If
    Wend
    j = j + 1
    k = k + 1
    If i - l < r - j Then
    p(k) = j
    w(k) = r
    r = i
    Else
    p(k) = l
    w(k) = i
    l = j
    End If
    d = -d
    GoTo toploop
    bubsort:
    If r - l > 0 Then
    For i = l To r
    b = i
    For j = b + 1 To r
    comp = comp + 1
    If List(j) <= List(b) Then b = j
    Next j
    If i <> b Then
    swic = swic + 1
    t = List(b)
    oldx1 = List(b)
    oldy1 = b
    List(b) = List(i)
    oldx2 = List(i)
    oldy2 = i
    newx1 = List(b)
    newy1 = b
    List(i) = t
    newx2 = List(i)
    newy2 = i
    End If
    Next i
    End If
    l = p(k)
    r = w(k)
    k = k - 1
    Loop Until k = 0
    End Sub