TIA Bubbelsort in SCL

Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
FOR #tMaxIndex := UpperBound - 1 TO 0 BY -1 DO // UpperBound: hier muss der maximal zulässige Index stehen 
    ...
END_FOR;

Nein Heinrich,
bei Upperbound muss der höchste Index des Arrays -1 stehen - du vergleichst ja Wert [Index] mit Wert [Index +1] ... und hier erfolgt dann (bzw. sonst) die Überschreitung der Array-Grenzen ...
Gruß
Larry
 
Hmm, für mich sieht das so aus: #tIndex kann maximal #tMaxIndex werden, und #tMaxIndex ist maximal UpperBound - 1, und #tIndex + 1 ist dann max. UpperBound

Harald
 
Hallo Larry,
Du schriebst: der Code von Heinrich überschreitet die Array-Grenzen. ("du vergleichst ja Wert [Index] mit Wert [Index +1] ... und hier erfolgt dann (bzw. sonst) die Überschreitung der Array-Grenzen ...")
Ich meine: er tut es nicht. Er überschreitet nicht die Array-Grenzen. Upperbound muss nicht der höchste Index des Arrays -1 sein, sondern so wie von Heinrich geschrieben "UpperBound: hier muss der maximal zulässige Index stehen" ist korrekt.

Gruß
Harald
 
Code:
FOR #tMaxIndex := UpperBound [COLOR=#0000cd][B]- 1[/B][/COLOR] TO 0 BY -1 DO // UpperBound: hier muss der maximal zulässige Index stehen 
...
Nein Heinrich,
bei Upperbound muss der höchste Index des Arrays -1 stehen - du vergleichst ja Wert [Index] mit Wert [Index +1] ... und hier erfolgt dann (bzw. sonst) die Überschreitung der Array-Grenzen ...
Doch Larry, meine - 1 ist doch genauso viel wert, wie Deine! ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry ... Asche auf mein Haupt ...
Ich hatte das mit dem Upperbound -1 in der Schleife nicht gesehen. Ihr habt natürlich vollkommen Recht.
Auf jeden Fall hat der TE nun aber eine Anleitung gegen seinen (vermutlichen) Fehler ...

Gruß
Larry
 
Nicht wirklich.
Was ist #sSortwierwert[#tIndex]."Time"?
Hast Du ein Array of struct, also eine Tabelle mit mehreren Spalten, in der Du die Zeilen nach den Werten in der Spalte "Time" sortieren sollst?

Ungetestet:
Code:
FOR #tMaxIndex := UpperBound - 1 TO 0 BY -1 DO // UpperBound: hier muss der maximal zulässige Index stehen 
    #swapped := FALSE;
    FOR #tIndex := 0 TO #tMaxIndex DO
        IF  #sSortierwert[#tIndex]."Time" > #sSortierwert[#tIndex + 1]."Time" THEN
            #tFlank := #sSortwierwert[#tIndex];
            #sSortierwert[#tIndex] := #sSortierwert[#tIndex + 1];
            #sSortierwert[#tIndex + 1] := #tFlank;
            #swapped := True;
        END_IF;
    END_FOR;
    IF NOT #swapped THEN EXIT; END_IF;
END_FOR;


Hi erst mal vielen Dank für die vielen Antworten.

Ja geanu ich muss ein Array of Struct 0-4 (5 Werte) nach dem Typ Time sortieren.

Dieses soll aber nur bei Sps Neustart oder Sort passieren.

Ne leider bin ich noch nicht wirklich weiter.
 
Dann muss deine Schleife von 3 auf 0 mit Schrittweite -1 laufen.
Ich weiß jetzt gerade wirklich nicht was da nun noch unklar ist. Was verstehst du nicht ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dieses soll aber nur bei Sps Neustart oder Sort passieren.

Ne leider bin ich noch nicht wirklich weiter.
Die "DrumRum"-If-Abfrage habe ich weggelassen, weil Du sie leicht wieder hinzufügen kannst und sie an sich nichts mit dem Prinzip des Sortierens zu tun hat.
Das, was ich als "UpperBound" in den Code geschrieben habe, musst Du nur durch den für Deinen Fall richtigen Wert - nämlich 4 - ersetzen.
Ansonsten weiss ich nicht, warum Dir das nicht weiterhilft ... :confused:
Du darfst ruhig etwas konkreter Dein Problem beschreiben, wenn wir es verstehen sollen! ;)
 
Ich verstehe leider nicht, was Du mit der Zeile '#sBrakePadSort := #iBrakePad;' bewirken willst.
Füge sie mal probeweise vor der Zeile 'FOR #tMaxIndex := 4 - 1 TO 0 BY -1 DO' ein, damit Dein zu sortierendes Array nicht nach jedem Bisschen sortieren wieder in den AnfangsZustand versetzt wird.
 
Zurück
Oben