Bubble sort

Status
Niet open voor verdere reacties.

hammerbreath

Nieuwe gebruiker
Lid geworden
2 nov 2008
Berichten
3
Ik moet een reeks getallen dat ingevoerd wordt (bv. 1, 5, 3, 2) omzetten in een getallenreeks op volgorde (dus 1, 2, 3, 5). Op elke site die ik tegenkom waar ik me heb laten inspireren door bestaande code's heb je te maken met het zogenaamde 'bubble sort' principe. Ik heb onderstaande code gevonden:

Dim Num As Variant
Dim i As Integer
Dim j As Integer

en dan de 'bubble sort' reeks

For i = LBound(Num) To UBound(Num)
For j = UBound(Num) To LBound(Num) + i Step -1
If Val(Num(i)) > Val(Num(j)) Then
tmp = Val(Num(j))
Num(j) = Val(Num(i))
Num(i) = Val(tmp)
End If
Next
Next

Kunnen jullie bij mij vertellen hoe de 'bubble sort' reeks werkt? Ik snap niet wat ie nou precies doet. Kunnen jullie commentaar leveren bij bovenstaande zinnen? Alvast reuze bedankt! :love:
 
bubbeltjes!

Err, okay, goed. WIkipedia heeft een goede pagina: link maar ik zal alsnog het even uitleggen.

Bubblesort gaat door je array heen, en pakt steeds 2 items die naast elkaar staan. Als ze verkeerd om staan, verwisselt ie ze. Anders gaat ie verder. Dit gaat door totdat alles goed staat.

nu, je code:
Code:
For i = LBound(Num) To UBound(Num)  [COLOR="SeaGreen"] 'loop door je array heen (i)[/COLOR]
For j = UBound(Num) To LBound(Num) + i Step -1  [COLOR="SeaGreen"] 'loop achterstevoren door je loop heen  (j)[/COLOR]
If Val(Num(i)) > Val(Num(j)) Then  [COLOR="SeaGreen"] 'als i > j dan, verkeerd om dus[/COLOR]
tmp = Val(Num(j))   [COLOR="SeaGreen"]'tijdelijk sla je het nummer op *1[/COLOR]
Num(j) = Val(Num(i)) [COLOR="SeaGreen"]  'verwissel ze   *2[/COLOR]
Num(i) = Val(tmp)  [COLOR="SeaGreen"] 'zet de tijdelijke terug   *3[/COLOR]
End If
Next
Next

De 2e regel, van de 'j'-loop: je loopt achterstevoren terug, maar niet direct de hele rij, maar in deze volgorde: x, x-1, x-2, x-3, etcetera. Als je een message box gebruikt met de waardes van i en j zal je zien hoe het werkt :)

nu, waar de *1 *2 en *3 staan, een korte uitleg: dit is eigenlijk gewoon de 2 array-waardes omwisselen. Maar je moet een tijdelijke waarde gebruiken, omdat je ze niet tegelijkertijd kan wisselen.

:thumb:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan