Hallo.
Habe versucht den mergesort zu programmieren, aber es klappt nicht. Eine und 2 Zahlen sortiert er noch korrekt, aber sobald die Gröse der zu sortierenden Zahlen grösser als 2 ist bricht Delphi ab. Weiss jemand woran das liegt?
Delphi-Quellcode:
procedure TFrmbubble.btmergeClick(Sender: TObject);
var zeit, start: integer;
cursor: TCursor;
begin
cursor := screen.Cursor;
Screen.Cursor := crHourGlass;
try
start := 1;
sortfeld := zufallsfeld;
starte_zeit(Zeit);
merge_sort(start,anzahl);
stoppe_zeit(Zeit);
anzahl := SpEdAnzahl.Value;
kopieresortfeldzustrgrd;
lbmsmerge.caption := inttostr(Zeit);
finally
Screen.Cursor := cursor;
end;
end;
Delphi-Quellcode:
procedure merge_sort(anfang, ende: integer);
var hilfsfeld: TFeld;
i,x,y,mitte, mitterechts: integer;
begin
IF ende > anfang THEN
begin
mitte := (anfang + ende) DIV 2;
mitterechts := mitte + 1;
merge_sort(anfang,mitte);
merge_sort(mitterechts,ende);
x := anfang;
y := mitterechts;
FOR i := Anfang TO ende DO
begin
IF sortfeld[x] < sortfeld[y] THEN
begin
hilfsfeld[i] := sortfeld[x];
sortfeld[x] := 1001;
IF x < mitte THEN inc(x);
end ELSE
begin
hilfsfeld[i] := sortfeld[y];
sortfeld[y] := 1001;
IF y < ende THEN inc(y);
end;
end;
FOR i := anfang TO ende DO
sortfeld[i] := hilfsfeld[i];
end;
end;
Gruss Sven