![]() |
*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 |
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?
|
Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
ja aber das hilft mir auch nicht weiter
|
Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
Zitat:
|
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. |
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
|
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 |
Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
debuggen???
|
Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
Hai naschkatze,
sharky hatte dich bereits gebeten, den Titel zu ändern. |
Re: *HILFE* Ich brauch eure Hilfe: HEAPSORT!!!!!
|
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