Sortieren in V2 BASIC

Es gibt 150 Antworten in diesem Thema, welches 27.359 mal aufgerufen wurde. Der letzte Beitrag (26. Dezember 2015 um 13:42) ist von BlackJack.

  • ich grübel gerade über den Abschnitt b = (n / 2) + 1 in Zeile 100. Funktioniert das so zuverlässig oder sollte da nicht lieber b=int(n/2)+1 stehen? Bei n=1 ergibt sich b=1.5 und erfüllt in Zeile 104 nicht die if-Bedingung.

    Gut aufgepasst, da hab ich Mist gebaut. Ich hab an der Stelle ganz verschwitzt, dass die Variable in Basic2 ja ein Float ist.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..


  • Und statt *h solltest du mal *256 nehmen, falls h=256 noch nicht definiert wurde.


    :platsch:

    Aber v=0*a(.) versteh ich immer noch nicht.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Bubble-Sort basiert im Prinzip auf dem Nachbar-Tausch Verfahren.

    Also ein größerer Nachbar tauscht mit einem kleineren Nachbarn, wenn der über ihm steht.

    Und wenn man das n Mal laufen lässt, ergibt sich dann eine sortierte Folge.

    Schönen Gruß.

  • Es ist (nur) eine C64-Besonderheit, die da ausgenutzt wird. Durch 0*a(.) wird dafür gesorgt, dass der Variablenzeiger in Speicheradresse 71, 72 (enthält die Adresse der zuletzt verwendeten Variable) auf das Array a()-zeigt (weil 0*a(.) zuletzt berechnet wurde). Und mit den Werten aus 71 und 72 wird dann der Zeiger ausgerechnet.

    Nachtrag: Speicheradressen sind jetzt korrigiert...

    Wissen ist das einzige Gut, das sich beim Teilen vermehrt. Also seid vorsichtig damit!

  • ...und wenn das Interpretergebiffe in einen separaten Thread ausgelagert wird, muss dieser hier nicht vor die Hunde gehen. Bisher war er nämlich größtenteils brauchbar.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Tale-X:

    Es sind die Speicherstellen 71/72 .
    Ob das bei anderen Computern ähnlich funktioniert weiß ich allerdings nicht.
    Beim C64 funkt es allerdings ganz gut.
    Ansonsten müßte man wohl die Variablenadresse komplizierter errechnen.

    Schönen Gruß.

  • Hallo Leute, ich hab hier noch mal eine neue Heap-Sort-Variante.
    Die im Vergleich zu dem ersten Heapsort im Thread 1/3 Zeitersparniss bringt.
    Heap-Sort-22, weil es in etwa 22 Sekunden für 100 Strings benötigt.
    Damit kann Heapsort dann durchaus mit Quicksort mithalten.

    Code
    300 :rem----heap-sort-22
    301 :e=n-1:fori=int(e/2)to.step-1:a=i:gosub305:next
    302 :fore=eto.step-1:a=.:b=a(e+1):a(e+1)=a(a):a(a)=b:onsgn(e)gosub305:next:return
    305 :forc=a+a+1toe:ifa(c)<a(c+1)then:c=c-(c<e)
    306 :ifa(a)<a(c)then:b=a(a):a(a)=a(c):a(c)=b:a=c:c=a+a:next
    307 :return

    Schönen Gruß.

  • So richtig geistig durchdringen kann ich es nicht - kämpfe gerade mit nem Virus (da sowohl Raspi als auch C128 immun gegen Viren sind, war ich wohl das naheliegendste Opfer). McBacons Variante ist nen Tick schneller: Bitte melde dich an, um diesen Link zu sehen. (also 21000 gegen 22000 Jiffies)

    Um mit Quicksort mithalten zu können müssten 66% Einsparung erzielt werden.

    Wissen ist das einzige Gut, das sich beim Teilen vermehrt. Also seid vorsichtig damit!