Du hast doch schon den richtigen Ansatz:
Du musst alle array vom Typ TArra haben, dann sollte es gehen, oder?
Oh ._. auf einmal funktioniert es
Aber im eigentlichen Programm macht das Probleme:
Delphi-Quellcode:
procedure Tsortalgo.MergeSortRun;
var
i: integer;
begin
SetLength(mlist,1);
mlist[0] := 0;
for i := 0 to elements-1 do
begin
SetLength(mlist, High(mlist));
mlist[i] := StrToInt(ListBox_List.Items[i]);
end;
mlist := MergeSort(mlist);
end;
function Tsortalgo.Merge(llst, rlst: TArray): TArray;
var
n: integer;
begin
SetLength(result,elements);
n := 0;
while (High(llst)>0) and (High(rlst)>0) do
begin
if llst[0] <= rlst[0]
then
begin
result[n] := llst[0];
n := n+1;
llst := RemoveItem(llst, 0);
end
else
begin
result[n] := rlst[0];
n := n+1;
rlst := RemoveItem(rlst, 0);
end;
end;
while High(llst)>0 do
begin
result[n] := llst[0];
n := n+1;
llst := RemoveItem(llst, 0);
end;
while High(rlst)>0 do
begin
result[n] := rlst[0];
n := n+1;
rlst := RemoveItem(rlst, 0);
end;
end;
function Tsortalgo.MergeSort(lst: TArray): TArray;
var
q, i: integer;
llst, rlst: TArray;
begin
if High(lst) <= 1
then
result := lst
else
begin
q := High(lst);
for i := 0 to round(q/2) do
begin
llst[i] := lst[i];
end;
for i := round(q/2) to q do
begin
rlst[i] := lst[i];
end;
end;
llst := MergeSort(llst);
rlst := MergeSort(rlst);
result := Merge(llst, rlst);
end;
function Tsortalgo.RemoveItem(lst: TArray; n: integer): TArray;
var
i: integer;
begin
for i := n to High(lst) do
begin
lst[i] := lst[i+1];
end;
SetLength(lst, High(lst)-1);
end;
Da spuckt er mir am Ende ein "
Exception EAccessViolation". Hab ich vielleicht irgendwo eine Grenze zu hoch gesetzt?