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