Autor Beitrag
sid1985
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 05.04.05 18:40 
Hallo,

bin relativ neu in der Delphi-Porgrammierung und suche nach einem fertig implementierten "Mergesort". Meine Suche bei Google war leider bisher relativ ergebnisslos, da bei dem Quellecode den ich finde meistens die rekursive Teilung am Anfang fehlt. Würde mich über jeden Link oder Sourcecode freuen.

ciao

Sid
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 05.04.05 22:38 
Hallo,

kennst Du die Seite :?: :
www.sortieralgorithmen.de

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
sid1985 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 06.04.05 11:31 
Titel: Habe den Algorithmus jetzt geschrieben...
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:

ausblenden volle Höhe Quelltext
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;
sid1985 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 06.04.05 11:39 
Titel: Hier noch die Fehlermeldung
Damit es vielleicht noch etwas deutlicher wird habe ich hier die Fehlermeldung angefügt!
Einloggen, um Attachments anzusehen!