hiho
ich soll ein programm schreiben welches die geschwindigkeit von sortieralgorythmen vergleicht.
bis jetzt bin ich am teil von selection sort.
das programm bringt, wenn ichs so starte, immer den folgenden fehler :
Code:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project2.exe ist eine
Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004529AA in Modul 'Project2.exe'. Lesen von Adresse 00D88000'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
glaube das liegt daran, das man das selectionsort mehrmals hinterinander laufen lässt. aber warum genau ?
wenn ich was vergesssen hab zu erwähnen dann sagt bitte bescheid, wollte nicht 3 seiten text posten
danke schonmal ! lg ichtyp
Delphi-Quellcode:
var
Form1: TForm1;
schritte, anzahl:integer; // die editfelder variablen
c,t1,t2:tLargeInteger; // für die zeitmessung
time: extended;
x: array of integer;
a,b,tmp:integer; // tausch procedur variablen
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize; // "würfeln"
queryperformancefrequency(c); // aktuelle zeit holen
memo1.Lines.clear; // memofelder leeren
memo2.Lines.clear;
memo3.Lines.clear;
memo4.Lines.clear;
memo5.Lines.clear;
memo6.lines.Clear;
end;
// ------ Selection sort ----------------------------//
procedure TForm1.Button1Click(Sender: TObject);
var h,i,j,k,t :integer;
begin
memo5.Lines.clear;
memo6.lines.Clear;
anzahl:=strtoint(edit1.text); // variablen einlesen
schritte:=strtoint(edit2.text);
setlength (x, anzahl); // array länge zuweisen
for i:=1 to anzahl do begin x[i]:=random(anzahl)+1 end;// das array befüllen mit zufallswerten
if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben
begin
for i:=1 to anzahl do memo5.lines.add(inttostr(x[i]))
end;
for h:=1 to schritte do
begin anzahl:=anzahl*i;
queryperformancecounter(t1); // Zeitmessung start !
for k:=1 to anzahl do
begin
for j:= k+1 to anzahl do begin
if x[j] < x[k] then begin
t:=x[j]; x[j]:=x[k]; x[k]:=t; end
end
end ;
if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben (sortiert, im feld daneben)
begin
for i:=1 to anzahl do memo6.lines.add(inttostr(x[i]))
end;
queryperformancecounter(t2); // Zeitmessung stop !
time:=(t2-t1)/c ;
memo1.lines.add(floattostr(time));
end;
end;
// ===================================================== //