AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von naschkatze1987 · begonnen am 17. Okt 2006 · letzter Beitrag vom 17. Okt 2006
Antwort Antwort
naschkatze1987

Registriert seit: 19. Sep 2006
Ort: Jacobsdorf
35 Beiträge
 
#1

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

  Alt 17. Okt 2006, 08:56
Hallo Leute!
Ich brauche eure Hilfe beim Sortieralgorithmus Heapsort. Ich muss das Programm für die Schule fertigstellen, aber irgendwie haut der Quelltext leider nicht. Theoretisch müsste er funktionieren, aber wie das so ist klappt es in der Praxis net.
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. Wär jedenfalls total lieb, wenn mir jemand helfen könnte. Ich sag schon mal Danke im Voraus!
liebe Grüße
naschkatze1987
*miau*
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 17. Okt 2006, 08:57
In der Tutorial-Sparte hat Daniel ein ausführliches Sortier-Tutorial veröffentlicht. Hast du dir das schon mal angeguckt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
naschkatze1987

Registriert seit: 19. Sep 2006
Ort: Jacobsdorf
35 Beiträge
 
#3

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

  Alt 17. Okt 2006, 09:55
ja aber das hilft mir auch nicht weiter
naschkatze1987
*miau*
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 17. Okt 2006, 09:57
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 17. Okt 2006, 10:14
Hai naschkatze,

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

Danke.
Stephan B.
  Mit Zitat antworten Zitat
naschkatze1987

Registriert seit: 19. Sep 2006
Ort: Jacobsdorf
35 Beiträge
 
#6

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

  Alt 17. Okt 2006, 17:35
Ich weiß ja nicht was mit dem Quelltext nicht stimmt... wenn ich das wüsste bräuchte ich euch ja nicht fragen
naschkatze1987
*miau*
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 17. Okt 2006, 17:38
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
Heiko
  Mit Zitat antworten Zitat
naschkatze1987

Registriert seit: 19. Sep 2006
Ort: Jacobsdorf
35 Beiträge
 
#8

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

  Alt 17. Okt 2006, 17:40
debuggen???
naschkatze1987
*miau*
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9

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

  Alt 17. Okt 2006, 18:43
Hai naschkatze,

sharky hatte dich bereits gebeten, den Titel zu ändern.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#10

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

  Alt 17. Okt 2006, 19:20
Zitat von naschkatze1987:
debuggen???
Debuggen.

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 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