Bubblesort mit Marke

Patrick Kamin

Erfahrenes Mitglied
Moin Freunde des logischen Denkens!

Musste gerade für ein Programm in der Uni den Bubblesort Algorithmus etwas modifizieren. Mein Problem ist, dass er funktioniert. Das Array wird sortiert, nur leider zu schnell. Hab noch ne Schleife drum, damit ich für Zeitmessungen ein vernünftiges Ergebnis in Millisekunden bekomme. Vielleicht könnte ihr mal gucken, wo irgendwo was unstimmig ist.
Code:
Procedure BubbleSort( Elemente : Word; KopieArray : TArray; var ErgebnisArray : TArray);
Var
  Marke, i, MarkeTemp,h : Word;
  MarkeFlag : Boolean;
  SArray : TArray;
Begin
 for h := 1 to Durchlauf do
 SArray := KopieArray;
 Begin<-
  Marke := 1;
  repeat
    MarkeFlag := True;
    i := Elemente;
    while i > Marke do
     Begin
       if SArray[i-1] > SArray[i] then
        Begin
          MarkeTemp := SArray[i];
          SArray[i] := SArray[i-1];
          SArray[i-1] := MarkeTemp;

          MarkeFlag := False;
          MarkeTemp := i;
        End;
       dec(i);
     End;
    Marke := MarkeTemp;
  until MarkeFlag;
 End;
 ErgebnisArray := SArray;
End;
Das Ganze flutscht unter TP6.
Elemente = Elemente im Array
Durchlauf = Schleifendurchläufe
KopieArray = Bei sortiertem Array, wird wieder das unsortierte Array genommen.
Danke schonmal im vorraus.
 
Zuletzt bearbeitet:
Was heisst genau "zu schnell"? Wenn Du das alles etwas rauszögern willst, kannst Du doch überall noch irgendwas passendes einbauen (Sleep, blinde Schleifen, ...). Das ist dann zwar nicht mehr ganz im Sinne des Erfinders, aber sollte helfen.

Ansonsten mach doch einfach das Array grösser, dann dauert das ganze logischerweise auch etwas länger. :rolleyes:

Nachtrag:
Ich weiss nicht, ob es das bei Turbo Pascal auch schon gibt, aber evtl. hilft Dir ein Timer weiter. Möglicherweise kannst Du sowas irgendwie per Windows API hinbiegen.
 
-

Vielleicht sieht noch jemand was.
Jo ich :p
Da verrutscht man mal mit einem Begin und denkt schon, man hat nen neuen superschnellen Sortieralgorithmus gefunden. :)


Um den ganzen Vorgang etwas heraus zuzögern, habe ich ja schon ne Schleife um den Algorithmus gepackt, damit man die Geschwindigkeit messen kann. Das Problem ist, wenn ich die Wiederholung auf 2000 stelle, dann brauchen andere Soriteralgorithmen wie Shakersort etc. ca 15 Sekunden, aber Bubblesort bleibt unter einer Sekunde.

Und ich will einfach keinen Fehler finden, hab schon stundenlang auf den Quellcode geguckt und es kann nur an der Prozedur liegen.

Also es geht mir nicht um die künstliche Verzögerung.
 
Zuletzt bearbeitet:
Zurück