Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!! (https://www.delphipraxis.net/79147-%2Ahilfe%2A-ich-brauch-eure-hilfe-heapsort.html)

naschkatze1987 17. Okt 2006 08:56


*HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
Hallo Leute! :bounce1:
Ich brauche eure Hilfe beim Sortieralgorithmus Heapsort. Ich muss das Programm für die Schule fertigstellen, aber irgendwie haut der Quelltext leider nicht. :gruebel: Theoretisch müsste er funktionieren, aber wie das so ist klappt es in der Praxis net. :wall:
Vielleicht weil ich probeirt habe mit 2 Listboxen zu sortieren, aber seht selbst:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Anzahl, vergleich, tausch, hv: Integer;
    a: real;
begin
  Anzahl:=StrToInt(Edit1.Text);
  a:=Anzahl DIV 2; {Berechnung des Anfangsknoten}
  vergleich:=0;
  tausch:=0;
  WHILE ((Listbox1.Items[a-1]<(Listbox1.Items[(2*a)-1]) OR (Listbox1.Items[2*a]))) DO
    BEGIN
      IF Listbox1.Items[a-1]<Listbox1.Items[2*a-1] {Vergleich mit 1.direkten Nachbarn}
      THEN
        BEGIN
          hv:=Listbox1.Items[a-1];
          Listbox1.Items[a-1]:=Listbox1.Items[2*a-1];
          Listbox1.Items[2*a-1]:=Listbox1.Items[hv];
          vergleich:=vergleich+1;
          tausch:=tausch+1;
        END
      ELSE vergleich:=vergleich+1;
      IF Listbox1.Items[a-1]<Listbox1.Items[2*a] {Vergleich mit 2.direkten Nachbarn}
      THEN
        BEGIN
          hv:=Listbox1.Items[a-1];
          Listbox1.Items[a-1]:=Listbox1.Items[2*a];
          Listbox1.Items[2*a]:=Listbox1.Items[hv];
          vergleich:=vergleich+1;
          tausch:=tausch+1;
        END
      ELSE vergleich:=vergleich+1;
      a:=a-1; {springt einen Knoten vor}
    END;
  Label4.Caption:='Es wurde bisher '+IntToStr(vergleich)+' mal verglichen und '+IntToStr(tausch)+' mal getauscht.';
end;

procedure TForm1.Button3Click(Sender: TObject);
var Anzahl, a, zv, vergleich, tausch, hv: Integer;
begin
  Anzahl:=StrToInt(Edit1.Text);
  Listbox2.Items[0]:=Listbox1.Items[0]; {Wurzel des Heaps wird in Listbox2 ausgegeben}
  vergleich:=0;
  tausch:=0;
  FOR zv:=1 TO (Anzahl-1) DO
  BEGIN
  Listbox1.Items[0]:=Listbox1.Items[Anzahl-1];
  Anzahl:=Anzahl-1;
  a:=1;
  IF ((Listbox1.Items[a-1]<(Listbox1.Items[2*a-1]) OR (Listbox1.items[2*a]))) THEN
    IF Listbox1.Items[a-1]<Listbox1.Items[2*a-1] {Wurzel wird mit direkten Nachbar verglichen}
    THEN
      BEGIN
        hv:=Listbox1.Items[a-1];
        Listbox1.Items[a-1]:=Listbox1.Items[2*a-1];
        Listbox1.Items[2*a-1]:=Listbox1.Items[hv];
        a:=2*a-1;
        vergleich:=vergleich+1;
        tausch:=tausch+1;
      END
    ELSE vergleich:=vergleich+1;
    IF Listbox1.Items[a-1]<Listbox1.Items[2*a] {Wurzel wird mit direktem Nachbar verglichen}
    THEN
      BEGIN
        hv:=Listbox1.Items[a-1];
        Listbox1.Items[a-1]:=Listbox1.Items[2*a];
        Listbox1.Items[2*a]:=Listbox1.Items[hv];
        a:=2*a;
        vergleich:=vergleich+1;
        tausch:=tausch+1;
      END
    ELSE vergleich:=vergleich+1;
  WHILE ((Listbox1.Items[a]<(Listbox1.Items[2*a+1]) OR (Listbox1.Items[2*a+2]))) DO {Umformung in einen Heap}
  BEGIN
    IF Listbox1.Items[a]<Listbox1.Items[2*a+1]
    THEN
      BEGIN
        hv:=Listbox1.Items[a];
        Listbox1.Items[a]:=Listbox1.Items[2*a+1];
        Listbox1.Items[2*a+1]:=Listbox1.Items[hv];
        a:=2*a+1;
        vergleich:=vergleich+1;
        tausch:=tausch+1;
      END
    ELSE vergleich:=vergleich+1;
    IF Listbox1.Items[a]<Listbox1.Items[2*a+1]
    THEN
      BEGIN
        hv:=Listbox1.Items[a];
        Listbox1.Items[a]:=Listbox1.Items[2*a+2];
        Listbox1.Items[2*a+2]:=Listbox1.Items[hv];
        a:=2*a+2;
        vergleich:=vergleich+1;
        tausch:=tausch+1;
      END
    ELSE vergleich:=vergleich+1;
  END;
  Listbox2.Items[zv]:=Listbox1.Items[0];
  END;
  Label5.Caption:='Es wurde '+IntToStr(vergleich)+' mal verglichen und '+IntToStr(tausch)+' mal getauscht.';
end;

Vielleicht könnt ihr mir ja helfen und wisst wo der Fehler liegt. :coder2: Wär jedenfalls total lieb, wenn mir jemand helfen könnte. Ich sag schon mal Danke im Voraus! :D
liebe Grüße

Luckie 17. Okt 2006 08:57

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
In der Tutorial-Sparte hat Daniel ein ausführliches Sortier-Tutorial veröffentlicht. Hast du dir das schon mal angeguckt?

naschkatze1987 17. Okt 2006 09:55

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
ja aber das hilft mir auch nicht weiter

Luckie 17. Okt 2006 09:57

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
Zitat:

Theoretisch müsste er funktionieren, aber wie das so ist klappt es in der Praxis net.
Eventuell wäre es hilfreich, wenn du uns sagst, was nicht klappt.

Sharky 17. Okt 2006 10:14

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
Hai naschkatze,

ändere doch bitte den Titel deines Threads so das er etwas über dein Problem aussagt. "Hilfe" sucht hier so ziemlich jeder.

Danke.

naschkatze1987 17. Okt 2006 17:35

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
Ich weiß ja nicht was mit dem Quelltext nicht stimmt... wenn ich das wüsste bräuchte ich euch ja nicht fragen

hoika 17. Okt 2006 17:38

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
Hallo,

dann packe halt mal 3 Einträge in die Listbox,
schnapp dir das Tutorial dazu und debugge das.
Ich arbeite mit Quicksort, der Code oben ist mir zu chaotisch.


Heiko

naschkatze1987 17. Okt 2006 17:40

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
debuggen???

MrSpock 17. Okt 2006 18:43

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
Hai naschkatze,

sharky hatte dich bereits gebeten, den Titel zu ändern.

r2c2 17. Okt 2006 19:20

Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
 
Zitat:

Zitat von naschkatze1987
debuggen???

Debuggen.

mfg

Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.

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