![]() |
Probleme mit Bubble-Sort und KO
Moin Leute,
ich stehe mal wieder vor einem Problem *heul*
Delphi-Quellcode:
function bubble (var a:array of integer):integer;
var j,w,laenge:integer; begin laenge:=form1.Memo1.Lines.Count; //setlength(a, laenge); for j:=laenge downto 1 do begin for w:=2 to j do begin if (a[w-1]>a[w]) then vertausch(a[w-1],a[w]); end;// end of w-for-schleife end; // end of j-for-schleife end; // end of function bubble function aus (var a:array of integer) :integer; var j:integer; begin laenge:=form1.Memo1.Lines.Count; for j:=1 to laenge do begin form1.memo2.Lines.Add(inttostr(a[j])); end; end; // end of function aus
Delphi-Quellcode:
Das sind meine Proceduren. Wenn ich die nun kompiliere bringt er mir immer einen Fehler. Zufallszahlen gehen, aber wenn ich sortiere ist die letzte Zahl immer eine "18", egal ob die im zu sortieren Teil drin ist oder nicht. Wie kann das passieren? Und wie kann ich Stack-Überläufe verhindern, wenn ich 2-mal 65.000 Zahlen sortiere bringt er mir immer den Fehler "Stack-Überlauf".
procedure TForm1.BubbleButtonClick(Sender: TObject);
var data: array of integer; var i:integer; begin laenge:=memo1.lines.count; setlength(data,laenge); //ein(data); laenge:=form1.Memo1.Lines.Count; for i:=1 to laenge do data[i]:=strtoint(form1.Memo1.Lines.Strings[i-1]); von:=gettickcount; bubble(data); bis:=gettickcount; aus(data); summe:=bis-von; BubbleLabel.Caption:=''; Wer kann mir helfen? |
Re: Probleme mit Bubble-Sort und KO
Wieso nimmst du nicht QuickSort ? :gruebel:
|
Re: Probleme mit Bubble-Sort und KO
ja, habe ich ja auch!
Da kommt aber der gleiche Fehler, wie bei Bubble-Sort. [OT]Es soll ein Programm werden, das 8 Sortierverfahren vergleicht[/OT] |
Re: Probleme mit Bubble-Sort und KO
Zitat:
|
Re: Probleme mit Bubble-Sort und KO
hallo,
warum guckst du dir nicht die thread demo an, wie es borland gelösst hat. da sind schon mal drei verfahren die funktionieren. raik |
Re: Probleme mit Bubble-Sort und KO
Der Stack-Überlauf ist einfach zu erklären, wenn man sich solche Code Zeilen wie diese anschaut:
Delphi-Quellcode:
und sich die Deklaration von data "danebenlegt":
for i:=1 to laenge do
data[i]:=strtoint(form1.Memo1.Lines.Strings[i-1]);
Delphi-Quellcode:
Data ist ein dynamischer Array und beginnt deshalb beim Index 0 (wie alle dyn. Arrays bei Delphi) und läuft bis laenge-1. Wenn man also im letzten Durchlauf der Schleife auf data[laenge] zugreifen will, kommt ein (berechtigter) Fehler, weil es dieses Element nicht mehr gibt.
var data: array of integer;
MfG Binärbaum |
Re: Probleme mit Bubble-Sort und KO
|
Re: Probleme mit Bubble-Sort und KO
@Khabarakh : der zweite Thread war zu einem anderen Fehler und hat sich dann zum Lösungsansatz hingearbeitet!Musste mal die Überschrift lesen :warn: ;-)
@Binärbaum: Ich bin doch noch ein blutiger Anfänger in Sachen Delphi-Programmierung :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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