Hur ser algoritmen för bubbelsortering ut? Hej bubblesort är kanske som bekant en av de sämsta du kan använda. En variant av Quicksort som du kan modifiera att passa den datatyp du vill använda. Brukar duga väldigt bra upp till några hundra tusen items men inte för riktigt stora arrayer.Sortering
    
    
Nån som kanske även har en bättre sorteringsalgoritm?
// PerSv: Sortering
    
    
Men här kommer i alla fall en snutt kod för att visa dig hur den fungerar.
Just denna kod sorterar tecknen i en sträng. Utan hänsyn till stora och
små bokstäver eller svenska tecken. (som ju är omkastade i ascii-tabellen)
Sample Code =====================================
Option Explicit
Private Sub Form_Load()
   Debug.Print "Före : " & "bubblesort är en kass sorteringsrutin"
   Debug.Print "Efter: " & bubbleSort("bubblesort är en kass sorteringsrutin")
End Sub
Private Function bubbleSort(aStr As String) As String
   Dim i As Integer
   Dim j As Integer
   Dim aChar As String
   Dim bChar As String
   For j = 1 To Len(aStr)
      For i = 1 To Len(aStr) - j
         aChar = Mid(aStr, i, 1)
         bChar = Mid(aStr, i + 1, 1)
         If aChar > bChar Then
            swap aChar, bChar
         End If
         Mid(aStr, i, 1) = aChar
         Mid(aStr, i + 1, 1) = bChar
      Next i
   Next j
   bubbleSort = aStr
End Function
Private Sub swap(ByRef aChar As String, ByRef bChar As String)
   Dim cChar As String
   cChar = aChar
   aChar = bChar
   bChar = cChar
End Sub
Sample Code =====================================
Jag skulle istället använda "mergesort". Det är en av de snabbare
sorteringsalgoritmer som finns. (Oftast snabbare än quicksort).
Men att ta upp den här skulle bli lite jobbigt och utrymmeskrävande.
Du kan söka på nätet efter följande algoritmer.
InsertionSort
SelectionSort
RadixSort
HeapSort
QuickSort
MergeSort
Kolla denna länk: http://hissa.nist.gov/dads/
/peterhSv: Sortering
    
    
Sub sortQuickArray(ByRef oneArray() As Double)
    Dim a As Double     'This two variables must be changed to
    Dim temp As Double  'the smallest possible typ you need
    Dim down As Integer
    Dim up As Integer
    Dim sp As Integer
    Dim lL As Integer
    Dim hL As Integer
    'In most cases it will be enough with an stacksize of 100
    'check carefully what will be needed to be sure
    Dim myStack(1 To 100) As Integer
    myStack(1) = LBound (oneArray)
    myStack(2) = UBound (oneArray)
    sp = 2
    While sp > 0
        lL = myStack(sp - 1)
        hL = myStack(sp)
        sp = sp - 2
        a = oneArray(lL)
        up = hL
        down = lL
        While down < up
            While Not oneArray(down) > a And down < hL
                down = down + 1
            Wend
            While oneArray(up) > a
                up = up - 1
            Wend
            If down < up Then
                temp = oneArray(down)
                oneArray(down) = oneArray(up)
                oneArray(up) = temp
            End If
        Wend
        oneArray(lL) = oneArray(up)
        oneArray(up) = a
        If up - 1 - lL > hL - up - 1 Then
            If lL < up - 1 Then
                sp = sp + 2
                myStack(sp - 1) = lL
                myStack(sp) = up - 1
            End If
            If hL > up + 1 Then
                sp = sp + 2
                myStack(sp - 1) = up + 1
                myStack(sp) = hL
            End If
        Else
            If hL > up + 1 Then
                sp = sp + 2
                myStack(sp - 1) = up + 1
                myStack(sp) = hL
            End If
            If lL < up - 1 Then
                sp = sp + 2
                myStack(sp - 1) = lL
                myStack(sp) = up - 1
            End If
        End If
    Wend
End Sub
Ha det!
\Leif P