Thema: Delphi Fehler bei Quicksort

Einzelnen Beitrag anzeigen

Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

Fehler bei Quicksort

  Alt 14. Aug 2006, 16:19
Hallo erstmal!
Ich wollte ein Quicksort-Programm programmieren. Hier der Quelltext (ist teilweise von Wikipedia abgeschrieben):
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    BtSortieren: TButton;
    BtGenerate: TButton;
    procedure FormCreate(Sender: TObject);
    procedure BtGenerateClick(Sender: TObject);
    procedure QuickSort(von, bis: Integer);
    procedure BtSortierenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const
  Menge = 7;

var
  Form1: TForm1;
  Feld: Array[1..Menge] of Integer;

implementation

procedure TForm1.QuickSort(von, bis: Integer);
var l, r, v, hilf: integer;
begin
  l := von;
  r := bis;
  v := (l + r) div 2;
  while l <= r do
  begin
    while (Feld[l] < Feld[v]) do
      l := l + 1;
    while (Feld[r] > Feld[v]) do
      r := r - 1;
    If l <= r then
    begin
      hilf := Feld[r];
      Feld[r] := Feld[l];
      Feld[l] := hilf;
      l := l + 1;
      r := r - 1;
    end;
  end;
  If von < r then QuickSort(von, r);
  If bis > l then QuickSort(l, bis);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TForm1.BtGenerateClick(Sender: TObject);
var i: integer;
begin
  For i := 1 to Menge do
  begin
    Feld[i]:=random(10);
    StringGrid1.Cells[i-1, 0] := IntToStr(Feld[i]);
  end;
end;

procedure TForm1.BtSortierenClick(Sender: TObject);
var i: Integer;
begin
  QuickSort(1, Menge);
  For i := 1 to Menge do
    StringGrid1.Cells[i-1, 0] := IntToStr(Feld[i]);
end;

end.
Meistens sortiert er es auch schon richtig, aber nicht immer. Wenn die Zahlenfolge z.B. 8731342 lautet, muss ich zweimal den Sortieren-Button klicken, damit die Zahlen richtig sortiert sind.
Was muss ich an dem Quelltext denn noch ändern, damit's klappt?
Ich hoffe, mir kann jemand helfen.
  Mit Zitat antworten Zitat