Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Probleme mit Mergesort (https://www.delphipraxis.net/64915-probleme-mit-mergesort.html)

whiteshark 9. Mär 2006 20:12


Probleme mit Mergesort
 
Hallo Leute,

ich habe mich mal an eine Mergesort-Implementierung gemacht, aber es kommt immer ein Stackoverflow!

Delphi-Quellcode:
procedure SortierenMisch(links,rechts:integer);
var mitte,j,i,k : integer;
begin
  if links < rechts then
  begin
   mitte :=(links+rechts) div 2; // mitte ermitteln
   SortierenMisch(links,mitte);      // rek. Aufruf (linke Liste)
   SortierenMisch(mitte+1,rechts);   // rek. Aufruf (rechte Liste)
   Mischen(links,mitte,rechts);

end; //of then
end; //MischSort
Delphi-Quellcode:
var j,i,k,s,ir,l : Integer;
Begin
j:=mitte+1;
i:=links;
k:=links;
 While (i<=mitte) and (j<=rechts) do
  Begin
   if (Mergefeld[i] <= Mergefeld[j]) then
    Begin
     hilfarray[k]:=Mergefeld[i];
     inc(i);
    end
   else
    Begin
     hilfarray[k]:=Mergefeld[j];
     inc(j);
    end;
   k:=k+1
  end;
 if i>mitte then
  For s:=j to rechts do
    hilfarray[k]:=Mergefeld[s]
 else
  For ir:=i to mitte do
    hilfarray[k]:=Mergefeld[ir];
 For l:=links to rechts do Mergefeld[l]:=hilfarray[l];
end;
Wo liegt das Problem?

Der_Unwissende 9. Mär 2006 20:43

Re: Probleme mit Mergesort
 
Hi,
sorry, aber deine Art zu fragen wird (imho) nicht zu vielen Antworten führen. Du solltest schon etwas mehr eigene Energie investieren. Zum Mergesort findest du mit Sicherheit einiges in der DP und auch wenn es verständlich ist, dass du hier nicht die Probleme anderer durchgehen willst, benutz die Suche, die schränkt vieles ein.

Wenn du aber möchtest, dass jmd. deinen Code durchgeht und dir deine Fehler raussucht, dann solltest du vorher etwas genauer sagen, was du versucht hast, wo der Fehler kommt, womit du getestet hast (kleine und große Arrays?)
Vorallem solltest du aber damit anfangen, deinen Code etwas mehr zu strukturieren. Dann siehst du leichter welche Stellen was machen. Wenn du die Zählvariablen dann noch etwas schöner benennst und deinen Code kommentierst, dann wirst du sicherlich (währenddessen) vielleicht schon deinen möglichen Fehler finden.

An sich (hab mir deinen Code nicht näher angeguckt), kann es bei sehr großen Feldern und Rekursion natürlich immer leicht zu einem Stackoverflow kommen

Gruß Der Unwissende

whiteshark 9. Mär 2006 20:49

Re: Probleme mit Mergesort
 
Naja, momentan sind 5 Elemente in dem Array. Das kann also nicht zu einem Stackoverflow kommen!
Kommentieren kann ich das mal, das ist eine gute Idee. Ich habe schon mehrere Versuche zum Debuggen durchgeführt, aber es kam nie zum Erfolg!

Ich bin momentan echt ahnungslos


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz