BubbleSort-Verfahren

  • Excel

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    BubbleSort-Verfahren

    Hallo Leute,
    Ich versuche die Zahlen aus "A1" per BubbleSort zu sortieren.
    Meine Frage dazu:
    Wie übergebe ich die Daten aus "A1" an mein Programm?
    Über den Rest (wie BubbleSort funktioniert) hab ich schon was gelesen.

    MfG
    Martin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MartinB.“ ()

    ahoi,

    die frage ist jetzt inwiefern deine kenntnisse da sind

    du deklarierst im code ein array
    die inhalte in den zellen liest du dann mit
    range in dein array
    mit dem kannst du dann das bubblesort-verfahren anwenden und dann wieder mit range in die zellen geben
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Arrays hatten wir vor kurzem in der Schule. Der Lehrer hat so erklärt als ob ein Array ein Kommode ist mit vielen Schubladen (mit Werten drin).
    Klingt zwar doof, aber so hab ich es verstanden!

    Mein Problem ist das wir in der Schule mit NetBean programmieren lernen. Ich habe aber vb 2008....

    Also sehe ich es richtg wenn ich das so mache:

    Visual Basic-Quellcode

    1. dim meinarray as long


    ich glaub ich vertausch momentan alles....ich steh voll aufm Schlauch.... ?(

    das hab ich im moment "programmiert":

    Visual Basic-Quellcode

    1. Option Explicit
    2. Public Function bubblesort() As Long
    3. Dim MeinArray As Long
    4. If [A1] < 0 Then
    5. MsgBox "Bitte eine positive Zahl eingeben!"
    6. Exit Function
    7. End If
    8. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MartinB.“ ()

    die strukturen kann man sich ja immer noch aus der hilfe oder dem netz holen ;)

    aber dein code würde so sicher besser aussehen ;)

    Visual Basic-Quellcode

    1. Public Function bubblesort() As Long
    2. Dim MeinArray() As Long
    3. If [A1] < 0 Then ' was ist [A1] ??
    4. MsgBox.Show ("Bitte eine positive Zahl eingeben!")
    5. Exit Function
    6. End If
    7. End Function


    dem array musst du natürlich noch die indexanzahl mitgeben oder du machst das dann später bevor du es nutzt mit redim
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Manü“ ()

    Die Indexzahl kann ich ja nicht vorher bestimmen, weil ich ja nicht weiß wieviele Zeichen eingegeben werden. Also muss ich das wohl mit diesem "redim" machen.
    Was auch immer das sein mag :wacko:

    Werd mich mal umgucken.

    Danke für die Hilfe!!!!


    PS: Falls du noch weitere Hilfestellungen hast....immer her damit :thumbsup:

    MfG
    wieso zeichen ?
    ich denke du willst verschiedene zahlen in die zellen eingeben und diese zahlen dann sortieren

    mit range holst du dir die inhalte aus zellen und bringst sie in eine variable

    zb.

    Visual Basic-Quellcode

    1. wert1 = range("A1")
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Ich komm nicht mehr weiter, habe nochmal von vorne begonnen....das habe ich bis jetzt gemacht....es funktioniert aber nicht!
    Könnt Ihr mir helfen?

    Visual Basic-Quellcode

    1. Sub Sortierung(ByRef MeineZahl As Variant)
    2. Dim i As Long
    3. Dim j As Long
    4. Dim Puffer As Variant
    5. For j = UBound(MeineZahl) - 1 To LBound(MeineZahl) Step -1
    6. For i = LBound(MeineZahl) To j
    7. If MeineZahl(i) > MeineZahl(i + 1) Then
    8. Puffer = MeineZahl(i)
    9. MeineZahl(i) = MeineZahl(i + 1)
    10. MeineZahl(i + 1) = Puffer
    11. End If
    12. Next i
    13. Next j
    14. MsgBox (MeineZahl)
    15. End Sub


    In der Zelle B2 steht :="Sortierung(A1)" und in A1 trage ich irgendwelche zahlen ein.... er sortiert aber nicht :(

    MfG
    ist meine zahl denn ein array ?
    und bist du dir sicher dass das auch wirklich als zahle deklariert ist ?
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    kannst du mal bitte den sub aufruf in deinem prog posten ?
    und am besten auch noch wie du die zahlen holst und wie die variablen deklariert sind
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    gut da war auch noch ein fehler....ist kein sub aufruf....sondern jetzt:

    Visual Basic-Quellcode

    1. Public Function Sortierung(ByRef MeineZahl() As Long)


    muss ich noch zusätzlich was programmieren?

    Vielen lieben dank für die ganze Hilfe Manü
    die function musst du ja noch irgendwo aufrufen
    und da du kein rückgabewert hast reicht auch ne sub
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    na du brauchst auf jedenfall erstmal ein ereignis (zb. buttonklick)
    wenn du auf den dann mal doppelt drauf klickst bekommst du ne sub ... rein theoretisch kannst du den code in dieser sub
    abarbeiten

    wenn du das aber unbedingt in einer function machen willst dann rufe deine function auf

    Visual Basic-Quellcode

    1. var = funcionname(parameter)

    var : eine variable desselben typ wir deine rückgabe (also deine function)
    functionname : name deiner funktion
    parameter : die varable die du übergibst (muss des gleichen typs sein wie die, die du in deiner function deklarierst hast)
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hallo nochmal...
    Ich habe mich nochmal im Netz nach anderen Bubblesorts umgeschaut und bin auch fündig geworden. Ich habe jetzt mein Programm soweit fertig und es funktioniert soweit ganz gut. Nur habe ich ein Problem. Ich möchte das mir die MsgBox anzeigt wie oft getauscht worden ist.
    Momentan zeigt mir die MsGBox nur an wieviele Zahlen getauscht worden sind.
    Das möchte ich ändern.
    Ich weiß das ich was in der äußeren FOR-Schleife ändern muss/könnte.
    Wäre sehr nett, wenn ihr mir helfen könntet

    Visual Basic-Quellcode

    1. Public Function BubbleSort(varArray As Variant)
    2. Dim i As Long, k As Long, m As Long
    3. Dim lngup As Long, lnglow As Long
    4. Dim varbuffer As Variant
    5. If Not IsArray(varArray) Then Exit Function
    6. lngup = UBound(varArray)
    7. lnglow = LBound(varArray)
    8. For i = lnglow To lngup - 1
    9. For k = lngup To i + 1 Step -1
    10. If varArray(i) > varArray(k) Then
    11. varbuffer = varArray(k)
    12. varArray(k) = varArray(i)
    13. varArray(i) = varbuffer
    14. m = m + 1
    15. End If
    16. Next
    17. Next
    18. BubbleSort = m
    19. End Function


    mfg
    Martin B.

    Visual Basic-Quellcode

    1. Public Function BubbleSort(varArray As Variant)
    2. Dim i As Long, k As Long, m As Long
    3. Dim lngup As Long, lnglow As Long
    4. Dim varbuffer As Variant
    5. If Not IsArray(varArray) Then Exit Function
    6. lngup = UBound(varArray)
    7. lnglow = LBound(varArray)
    8. For i = lnglow To lngup - 1
    9. Changed=False
    10. For k = lngup To i + 1 Step -1
    11. If varArray(i) > varArray(k) Then
    12. Changed=True
    13. varbuffer = varArray(k)
    14. varArray(k) = varArray(i)
    15. varArray(i) = varbuffer
    16. m = m + 1
    17. End If
    18. Next
    19. If Changed Then ChangeCounter = ChangeCounter + 1
    20. Next
    21. BubbleSort = m
    22. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo nochmal

    Danke petaod für die Hilfe, aber geändert hat sich eigentlich nicht viel!
    Das Programm zeigt ir immernoch an wieviele Zahlen getauscht wurden. Ich möchte jedoch die tauschvorgänge angezigt bekommen.
    Beispiel an einer Zahlenreihe:
    10,2,3,4,5,6,7,8,9,1

    Jetzt zeigt mir mein BubbleSort an das ein Tauschvorgang durchgeführt wurde!
    Stimmt aber nicht die zehn muss ja mit allen anderen Ziffern tauschen damit sie hinten ankommt und die 1 muss ja auch nach vorn getauscht werden.
    Meiner Meinung nach sind das dann 17 tauschvorgänge.

    Ist 10 größer als 2? Ja? Dann tausche... ist zehn größer als 3? Ja? Dann tausch usw usw.

    hier mein Code den ich jetzt habe:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Public Sub SortiereBereichA1A10()
    3. Dim arr(10) As Variant, i As Integer
    4. With Worksheets("Tabelle1")
    5. For i = 1 To 10
    6. arr(i) = .Cells(i, "A")
    7. Next i
    8. MsgBox ("Es wurde(n) " & BubbleSort(arr) & " Tauschvorgänge durchgeführt!")
    9. For i = 1 To 10
    10. .Cells(i, "B") = arr(i)
    11. Next i
    12. End With
    13. End Sub
    14. Public Function BubbleSort(varArray As Variant)
    15. Dim i As Long, k As Long
    16. Dim lngup As Long, lnglow As Long
    17. Dim varbuffer As Variant
    18. Dim Changed As Boolean
    19. Dim ChangeCounter As Integer
    20. If Not IsArray(varArray) Then Exit Function
    21. lngup = UBound(varArray)
    22. lnglow = LBound(varArray)
    23. For i = lnglow To lngup - 1
    24. Changed = False
    25. For k = lngup To i + 1 Step -1
    26. If varArray(i) > varArray(k) Then
    27. Changed = True
    28. varbuffer = varArray(k)
    29. varArray(k) = varArray(i)
    30. varArray(i) = varbuffer
    31. End If
    32. Next
    33. If Changed Then ChangeCounter = ChangeCounter + 1
    34. Next
    35. BubbleSort = ChangeCounter
    36. End Function


    MfG
    Martin