Danke für den Link, habe mir jetzt auf Grund dessen den Algorithmus geschrieben, allerdings läuft er nicht, er meldet mir immer wieder, dass er außerhalb des Indizes des Arrays kommt. Leider kann ich meinen Fehler nicht finden. Vielleicht hat jemand von euch mehr Glück.
Die Prozedure Mergesort:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| procedure TForm1.Mergesort(var Zahlen: array of integer; l,r: integer); var z : integer; begin if (r-1) > 0 then begin Teiler:= (1+r) div 2; //Wir suchen uns die Mitte Mergesort(Zahlen,l,Teiler); //Teilt die hälften Links Mergesort(Zahlen,Teiler,r); //Teilt die rechten Hälften Merge(Zahlen,l,Teiler,r); //Siehe Prozedure Merge end;
for z:=1 to 25 do begin StringGrid1.Cells[z,1]:=inttostr (Zahlen[z]); end end;
procedure TForm1.Merge(var Zahlen: array of integer; l,Teiler,r: integer); var Hilfsarray : array[1..25] of integer; var h1, h2, h3, h4, : integer; begin
h1:=1; h2:=(Teiler + 1); h3:=l;
while (h1>=Teiler) and (h2<=r) do begin if Zahlen[h1]<= Zahlen[h2] then begin Hilfsarray[h3]:= Zahlen[h2]; h1:= h1+1; end else begin Hilfsarray[h3]:= Zahlen[h2]; h2:= h2+1; end; h3:= h3+1; end;
if h1 > Teiler then for h4:= h1 to r do Hilfsarray[h3+h4-h2]:= Zahlen[h4] else begin for h4:= h1 to Teiler do Hilfsarray[h3+h4-h1]:= Zahlen[h4]; for h4:= l to r do Zahlen[h4]:= Hilfsarray[h4]; end;
end; |