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.