unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 =
class(TForm)
Heading: TLabel;
BubbleButton: TButton;
QuickButton: TButton;
MergeButton: TButton;
OpenButton: TButton;
Eingabe: TEdit;
OpenDialog1: TOpenDialog;
Label2: TLabel;
Ausgabe: TListBox;
SaveDialog1: TSaveDialog;
Speichern: TEdit;
SaveButton: TButton;
RadioGroup1: TRadioGroup;
Aufsteigend: TRadioButton;
Abfallend: TRadioButton;
procedure OpenButtonClick(Sender: TObject);
procedure BubbleButtonClick(Sender: TObject);
procedure MergeButtonClick(Sender: TObject);
procedure MergeSort(
var L,R: Integer);
procedure QuickButtonClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
txtfile: Textfile;
save:
string;
Feld, Merken:
Array of string;
Z: Integer;
implementation
{$R *.DFM}
procedure Quicksort(l,r: Integer;
var a :
array of integer);
var i, j, Merke, Mitte: Integer;
begin
i := l;
j := r;
Mitte := a[(l+r)
div 2];
repeat
while a[i] < Mitte
do Inc(i);
while Mitte < a[j]
do dec(j);
if i <= j
then
begin
Merke := a[i];
a[i] := a[j];
a[j] := Merke;
inc(i);
dec(j);
end;
until i > j;
if l < j
then Quicksort(l,j,a);
if i < r
then Quicksort(i,r,a);
end;
procedure TForm1.MergeSort(
var L, R : integer );
var
i, j, k, m, m2 : Integer;
begin
if R>L
then
begin
m:= (R+L)
div 2;
m2:= m+1;
MergeSort( L, m);
MergeSort( m2, R);
for i:= L
to m
do Merken[i]:= Feld[i];
i:= L;
for j:= m+1
to R
do Merken[R+m+1-j]:= Feld[j];
j:= R;
for k:= L
to R
do
begin
if (Merken[i] < Merken[j])
then
begin
Feld[k]:= Merken[i];
inc(i);
end
else
begin
Feld[k]:= Merken[j];
dec(j);
end;
end;
end;
end;
procedure TForm1.OpenButtonClick(Sender: TObject);
var
A: Integer;
begin
Z:=0;
OpenDialog1.Execute;
Eingabe.Text:=OpenDialog1.Filename;
AssignFile(txtfile, Eingabe.text);
reset (txtfile);
while not eof (txtfile)
do
begin
Z:= Z+1;
readln (txtfile, save);
Ausgabe.items.add(save);
end;
Setlength(Feld, Z);
reset(txtfile);
for A:= 0
to Z-1
do
begin
readln (txtfile, Feld[A]);
end;
end;
procedure TForm1.BubbleButtonClick(Sender: TObject);
var
x: Integer;
Temp:
String;
Done: Boolean;
begin
Ausgabe.clear;
repeat
done:= True;
for x := Low(Feld)
to High(Feld) -1
do
begin
if Feld[x] > Feld[x+1]
then
begin
Temp := Feld[x];
Feld[x] := Feld[x+1];
Feld[x+1] := Temp;
Done := False;
end;
end;
until done;
if Aufsteigend.checked=True
then
begin
for x:= Low(Feld)
to High(Feld)
do
begin
Ausgabe.Items.add(Feld[x]);
end;
end
else if Abfallend.checked=True
then
begin
for x:= High(Feld)
downto Low(Feld)
do
begin
Ausgabe.Items.add(Feld[x]);
end;
end;
end;
procedure TForm1.MergeButtonClick(Sender: TObject);
var
g,c,x: Integer;
begin
c:= Low(Feld);
g:= High(Feld);
Ausgabe.clear;
begin
MergeSort (c,g);
if Aufsteigend.checked=True
then
begin
for x:= Low(Feld)
to High(Feld)
do
begin
Ausgabe.Items.add(Feld[x]);
end;
end
else if Abfallend.checked=True
then
begin
for x:= High(Feld)
downto Low(Feld)
do
begin
Ausgabe.Items.add(Feld[x]);
end;
end;
end;
end;
procedure TForm1.QuickButtonClick(Sender: TObject);
var
i,j: Integer;
begin
i:= Low(Feld);
j:= High(Feld);
Ausgabe.clear;
begin
QuickSort (i,j);
end;
end;
end.