Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Irgendwo ein Rechenfehler

  Alt 24. Feb 2009, 19:41
Ich glaube Deine BubbleSort Routine ist mangelhaft, zumindest im Nachbau funktionierte es nicht.

Hier mal der Nachbau, der aber mit ein paar Änderungen funktioniert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  pyt1 : array[1..10] of Byte = (4,7,2,9,4,1,0,8,3,5);
var
  pyt4 : Byte;
  i, bots : Integer;
  getauscht : Boolean;
begin
  // Init
  bots := High(pyt1);
  ListBox1.Clear;
  ListBox1.Items.Add('Items: '+IntToStr(bots));

  // Bubblesort
  repeat
    getauscht := false;
    for i := 1 to bots - 1 do begin
      if pyt1[i] > pyt1[i+1] then begin
        pyt4 := pyt1[i];
        pyt1[i] := pyt1[i+1];
        pyt1[i+1] := pyt4;
        getauscht := true;
      end;
    end;
    dec(bots); // Laut Pseudocode Max -1

  until (not getauscht) and (bots < 2); // Laut Pseudocode Abbruch bei "Nicht getauscht" und "Liste fertig"

  // Zum Prüfen des Ergebnis
  for i := 1 to High(pyt1) do
    ListBox1.Items.Add(IntToStr(pyt1[i]));
Im Pseudocode steht ja am Ende "solange vertauscht und n >= 1". Da Delphi aber auf "solange nicht" prüft, müssen beide Bedingungen negiert geprüft werden. Zudem muss nach Durchlauf einer Schleife der Zeiger auf das letzte Listen-Element decrementiert werden.
  Mit Zitat antworten Zitat