unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
type
TDaten =
record
zahl: integer;
farbe: TColor;
end;
var
Form1: TForm1;
Daten:
array of TDaten;
l, r: integer;
BMP: TBitmap;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
temp_zahl: integer;
temp_color: tColor;
begin
randomize;
SetLength(Daten,0);
for i:=0
to 511
do
begin
SetLength(Daten,Length(Daten)+1);
Daten[i].Zahl:=random(512)+1;;
Daten[i].Farbe:=ClBlue;
end;
l:=0;
r:=511;
//DRAW
With Form1.Canvas
do
begin
brush.Color:=clWhite;
rectangle(0,0,512,512);
pen.Width:=1;
for i:=0
to 511
do
begin
Pen.Color:=Daten[i].Farbe;
Rectangle(i,Daten[i].Zahl,i+4,Daten[i].Zahl+4);
Daten[i].Farbe:=ClBlue;
end;
end;
//DRAW
//BUBBLESORT
repeat
begin
if Daten[l].Zahl > Daten[l+1].Zahl
then
begin
// lösche rechteck an der alten Position
Form1.canvas.pen.color:=clwhite;
Form1.Canvas.Rectangle(l,Daten[l].Zahl,l+4,Daten[l].Zahl+4);
Form1.Canvas.Rectangle(l+1,Daten[l+1].Zahl,l+1+4,Daten[l+1].Zahl+4);
Temp_Zahl:=Daten[l].zahl;
Daten[l].zahl:=Daten[l+1].zahl;
Daten[l+1].zahl:=Temp_Zahl;
// verschiebe Rechteck
Form1.Canvas.Pen.Color:=clBlue;
Form1.Canvas.Rectangle(l,Daten[l].Zahl,l+4,Daten[l].Zahl+4);
Form1.Canvas.Rectangle(l+1,Daten[l+1].Zahl,l+1+4,Daten[l+1].Zahl+4);
Temp_Color:=Daten[l].farbe;
Daten[l].farbe:=Daten[l+1].farbe;
Daten[l+1].farbe:=Temp_Color;
end;
inc(l);
if l=r
then
begin
dec(r);
l:=0;
end;
for i:=r+1
to 511
do
Daten[i].Farbe:=ClNavy;
Daten[l].Farbe:=ClRed;
Daten[l+1].Farbe:=ClGreen;
end until l>=r;
end;
end.