unit Quicksort1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, allconst, allproc, allvar, alltype;
type
TForm1 =
class(TForm)
StringGridUnsort: TStringGrid;
StringGridSortiert: TStringGrid;
ButtonGenerieren: TButton;
ButtonSortieren: TButton;
ButtonBeenden: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure ButtonGenerierenClick(Sender: TObject);
procedure ButtonSortierenClick(Sender: TObject);
procedure ButtonBeendenClick(Sender: TObject);
procedure qusort1 (
var anfang, ende : integer);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Tausch(
var x,y: Integer);
var tauscharray: tdaten;
begin
tauscharray[1]:= daten[x];
daten[x] := daten[y];
daten[y] := tauscharray[1];
end;
//Quicksort-Prozedur
procedure TForm1.qusort1 (
var anfang, ende : integer);
var
a, m, e: integer;
richtung: tRichtung;
i,j,x: integer;
begin
if ende-anfang<=6
then
begin
//Start Bubblesort
begin
for i:=2
to max
do
for j:=max
downto i
do
if Daten[j-1]>Daten[j]
then
begin
x:=Daten[j-1];
Daten[j-1]:=Daten[j];
Daten[j]:=x;
end;
for i:=1
to max
do
StringGridSortiert.Cells[0,i-1]:=inttostr(Daten[i]);
end;
//Ende Bubblesort
end
else
begin
while e>a
do
begin
if richtung=vonrechts
then
begin
while (daten[e]>=daten[m])
and (e>m)
do
begin
dec(e);
end;
if e>m
then
begin
Tausch(e,m);
m:=e;
end;
richtung:=vonlinks;
end
else
begin
while (daten[a]<=daten[m])
and (a<m)
do
begin
inc(a);
end;
if a<m
then
begin
Tausch(a,m);
m:=a;
end;
richtung:=vonrechts;
end;
dec(m);
qusort1(anfang, m-1);
inc(m);
qusort1(m+1,ende);
end;
end;
end;
//Button zum Generieren von Zufallszahlen
procedure TForm1.ButtonGenerierenClick(Sender: TObject);
var i: integer;
begin
randomize;
for i:=1
to max
do
begin
sortdaten[i]:=trunc(random*100);
StringGridUnsort.Cells[0,i-1]:=inttostr(sortdaten[i]);
end;
end;
//Aufruf der Quicksort Prozedur
procedure TForm1.ButtonSortierenClick(Sender: TObject);
var i: integer;
begin
qusort1 (sortdaten[1],sortdaten[max]);
for i:=1
to max
do StringGridSortiert.Cells[0,i-1]:=inttostr(sortdaten[i]);
end;
//Button zum Beenden des Programms
procedure TForm1.ButtonBeendenClick(Sender: TObject);
begin
close;
end;
end.