如果一个数组里杂乱的存着一些数据
如 8、1、12、56、J、a  怎么按倒序啊或者某种规则排序
56、12、8、1  或者 1、8、12、56
有没有什么函数啊

解决方案 »

  1.   

    没学过C或者PASCAL以及数据结构吗?
    在学语言的时候接触过冒泡,选择,快速排序之类的编程,学数据结构的时候系统的对每种排序算法的速度做了全面的描述,还不知道!?
      

  2.   


    在窗体上放一个listbox,设置其sorted为true。Option ExplicitPrivate Sub Form_Load()    Dim a(5) As String
        Dim i As Integer    List1.Clear
        List1.Visible = False
        
        a(0) = "9": a(1) = "a": a(2) = "5": a(3) = "4": a(4) = "s": a(5) = "1"
        
        Me.Show
        Print "排序前"
        For i = 0 To 5
            List1.AddItem a(i)
            Print a(i)
        Next
       
        For i = 0 To 5
            a(i) = List1.List(i)
        Next
        
        Print
        Print "排序后"
        For i = 0 To 5
            Print a(i)
        Next
    End Sub
      

  3.   


    '
    '数值快速排序(从小到大)
    '函数:NumSortAZ
    '参数:Myarray Double数组,L 数组的左边界,R 数组右边界.
    '返回值:无
    '例子:
    Public Sub NumSortAZ(ByRef Myarray, L As Long, R As Long)
        Dim I As Long, j As Long, A As Long
        Dim TmpX As Variant, TmpA As Variant    I = L: j = R: TmpX = Myarray((L + R) / 2)    While (I <= j)
            While (Myarray(I) < TmpX And I < R)
                I = I + 1
            Wend
            While (TmpX < Myarray(j) And j > L)
                j = j - 1
            Wend
            If (I <= j) Then
                TmpA = Myarray(I)
                Myarray(I) = Myarray(j)
                Myarray(j) = TmpA
                I = I + 1: j = j - 1
            End If
        Wend
        If (L < j) Then Call NumSortAZ(Myarray, L, j)
        If (I < R) Then Call NumSortAZ(Myarray, I, R)
    End Sub
      

  4.   

    '
    '字符串快速排序(从小到大)
    '函数:StrSortAZ
    '参数:sArr String数组,First 数组的左边界,Last 数组右边界.
    '返回值:无
    '例子:
    Public Sub StrSortAZ(ByRef sArr() As String, First As Long, Last As Long)
        Dim vSplit As String, vT As String
        Dim I As Long, j As Long, iRand As Long    If First < Last Then
            If Last - First = 1 Then
                If sArr(First) > sArr(Last) Then
                    vT = sArr(First): sArr(First) = sArr(Last): sArr(Last) = vT
                End If
            Else
                iRand = Int(First + (Rnd * (Last - First + 1)))
                vT = sArr(Last): sArr(Last) = sArr(iRand): sArr(iRand) = vT
                vSplit = sArr(Last)
                Do
                    I = First: j = Last
                    Do While (I < j) And (sArr(I) <= vSplit)
                        I = I + 1
                    Loop
                    Do While (j > I) And (sArr(j) >= vSplit)
                        j = j - 1
                    Loop                If I < j Then
                        vT = sArr(I): sArr(I) = sArr(j): sArr(j) = vT
                    End If
                Loop While I < j            vT = sArr(I): sArr(I) = sArr(Last): sArr(Last) = vT            If (I - First) < (Last - I) Then
                    StrSortAZ sArr(), First, I - 1
                    StrSortAZ sArr(), I + 1, Last
                Else
                    StrSortAZ sArr(), I + 1, Last
                    StrSortAZ sArr(), First, I - 1
                End If
            End If
        End If
    End Sub
      

  5.   

    简单方法:
    把数组元素添加到一个 Sorted = True 的 ListBox 中。
      

  6.   

    如下程序为何得不到预想的结果'字符串快速排序(从小到大)
    '函数:StrSortAZ
    '参数:sArr String数组,First 数组的左边界,Last 数组右边界.
    '返回值:无
    '例子:
    Public Sub StrSortAZ(ByRef sArr, First As Long, Last As Long)
        Dim vSplit As String, vT As String
        Dim I As Long, j As Long, iRand As Long    If First < Last Then
            If Last - First = 1 Then
                If sArr(First) > sArr(Last) Then
                    vT = sArr(First): sArr(First) = sArr(Last): sArr(Last) = vT
                End If
            Else
                iRand = Int(First + (Rnd * (Last - First + 1)))
                vT = sArr(Last): sArr(Last) = sArr(iRand): sArr(iRand) = vT
                vSplit = sArr(Last)
                Do
                    I = First: j = Last
                    Do While (I < j) And (sArr(I) <= vSplit)
                        I = I + 1
                    Loop
                    Do While (j > I) And (sArr(j) >= vSplit)
                        j = j - 1
                    Loop                If I < j Then
                        vT = sArr(I): sArr(I) = sArr(j): sArr(j) = vT
                    End If
                Loop While I < j            vT = sArr(I): sArr(I) = sArr(Last): sArr(Last) = vT            If (I - First) < (Last - I) Then
                    StrSortAZ sArr, First, I - 1
                    StrSortAZ sArr, I + 1, Last
                Else
                    StrSortAZ sArr, I + 1, Last
                    StrSortAZ sArr, First, I - 1
                End If
            End If
        End If
    End Sub
    Private Sub Command1_Click()
    StrTemp = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
    Dim I As Long
    ReDim NEWARR(10)    For I = 0 To 9
            Randomize
            NEWARR(I) = StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & _
            "." & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0))
            Debug.Print "Bef-" & NEWARR(I)
        Next I
        
        Call StrSortAZ(NEWARR, LBound(NEWARR), UBound(NEWARR))
        
        For I = 0 To 9
            Debug.Print "Aft-" & NEWARR(I)
        Next I
    End Sub-------------------输出
    Bef-zuact.fsn
    Bef-cdrfh.25r
    Bef-xaftq.hzl
    Bef-i627z.vug
    Bef-33pm8.boa
    Bef-zfjc1.fyu
    Bef-lc6qb.ttp
    Bef-57u4k.7nj
    Bef-r4hjt.nhd
    Bef-d14x1.1c7
    Aft-                '''这一行数据为空
    Aft-33pm8.boa
    Aft-57u4k.7nj
    Aft-cdrfh.25r
    Aft-d14x1.1c7
    Aft-i627z.vug
    Aft-lc6qb.ttp
    Aft-r4hjt.nhd
    Aft-xaftq.hzl
    Aft-zfjc1.fyu
      

  7.   

    其实LISTBOX内部用的也无非是快速排序的算法而已,如果数据比较多的话还要一条条的全插入到LISTBOX中,反而影响速度,还不如自己排序算了,程序员最好不要偷懒啊~~~~~
      

  8.   

    可以在数据库中打开时就order by排序,还有list方法对小的数据还可以,大量的不易采用……
      

  9.   

    Sub STRINGSORT(ByRef a() As String, Optional sort As String = "UP") '字符串排序
    Dim min As Long, max As Long, num As Long, first As Long, last As Long, temp As Long, all As New Collection, steps As Long
    min = LBound(a)
    max = UBound(a)
    all.Add a(min)
    steps = 1
    For num = min + 1 To maxfirst = 1
    last = all.Count
    If a(num) < all(1) Then all.Add a(num), BEFORE:=1: GoTo nextnum '加到第一项
    If a(num) > all(last) Then all.Add a(num), AFTER:=last: GoTo nextnum '加到最后一项
    Do While last > first + 1 '利用DO循环减少循环次数
    temp = (last + first) \ 2
    If a(num) > all(temp) Then
    first = temp
    Else
    last = temp
    steps = steps + 1
    End If
    Loop
    all.Add a(num), BEFORE:=last '加到指定的索引nextnum:
    steps = steps + 1
    Next
    For num = min To max
    If sort = "UP" Or sort = "up" Then a(num) = all(num - min + 1): steps = steps + 1 '升序
    If sort = "DOWN" Or sort = "down" Then a(num) = all(max - num + 1): steps = steps + 1 '降序
    Next
    MsgBox "本数组共经过 " & steps & "步实现" & IIf(sort = "UP" Or sort = "up", "升序", "降序") & "排序!", 64, "INFORMATION"
    Set all = Nothing
    End SubPrivate Sub Command1_Click()
    Const temp = "0123456789abcdefghijklmnopqrstuvwxyz"
    Dim x(200) As StringFor i = 0 To 200
    Randomize
    x(i) = Mid(temp, Int(Rnd * 35 + 1), 1) & Mid(temp, Int(Rnd * 35 + 1), 1) & Mid(temp, Int(Rnd * 35 + 1), 1)
    Next
    MsgBox Join(x, ","), 64, "before sort"
    STRINGSORT x, "down"' 降序
    MsgBox Join(x, ","), 64, "after sort"
    End Sub