![]() |
Problem bei einem Sortierverfahren
Liste der Anhänge anzeigen (Anzahl: 1)
Ich programmiere gerade mit Delphi ein paar unterschiedliche Sortierverfahren. Ich bin zur Zeit noch beim ausprobieren, aber bei einem Verfahren komme ich einfach nicht weiter. Eigentlich ist es fertig, aber wenn ich es benutze, stürzt das programm immer ab. Hier der Quellcode:
Delphi-Quellcode:
Vielleicht kann mir jemand helfen. Die Dateien sind in einer Zip-Datei als Attachment hinzugefügt, falls jemand Interesse haben sollte den Fehler zu beheben.
procedure TForm1.Sortierverfahren4Click(Sender: TObject);
var n: integer; procedure Quicksort(links,rechts:integer); var el,er,grenze: integer; hilfe:string; begin el := links; er:=rechts; grenze := strtoint(ListeSortiert.Items.Strings[links]); repeat while strtoint(ListeSortiert.Items.Strings[el])<grenze do el:=el+1; while strtoint(ListeSortiert.Items.Strings[er])<grenze do er:=er-1; if(el <> er) then begin hilfe := ListeSortiert.Items.Strings[el]; ListeSortiert.Items.Strings[el] := ListeSortiert.Items.Strings[er]; ListeSortiert.Items.Strings[er] := hilfe; end; until el>er; if (er > links) then QuickSort(links,er); if (el < rechts) then QuickSort(el,rechts); end; Gruß Helios |
In der Tutorial-Sparte hat Daniel ein paar Sortierverfahren besprochen. Da schon mal gekuckt?
|
Hallo und herzlich Willkommen im Forum!
Das problem ist folgende zeile:
Delphi-Quellcode:
el wird nie höher und somit hast Du da eine Endlosschleife. Dein el wird nie erhöht. er ist ja 4 und el ist ja immer 1, kann also nicht gehen.
until el>er;
Grüsse, Daniel :hi: |
Danke für den Tipp. Aber ich weiß jetzt noch nicht, was ich ändern muss, damit "el" so erhöht wird, dass es funktioniert. Wäre gut wenn du vielleicht einen Lösungsvorschlag hast. :coder:
|
Ich zitiere mich ungern selber:
Zitat:
|
Hallo,
nun, das einfachste wäre:
Delphi-Quellcode:
So bleibt man wenisgtens nicht mehr hängen. ;)
Inc(el);
until el>er; Grüsse, Daniel :hi: |
@Luckie: Da hab ich eben mal geguckt. Nur sieht der Quellcode von dem Verfahren, an dem ich arbeite dort ganz anders aus. Ich kann zumindest nichts damit anfangen, weil ich noch nicht lange mit Delphi programmiere. Und diesen Quellcode, den ich hier habe, ist von meinem Informatiklehrer. Eigentlich sollte es funktionieren, aber mein Lehrer hat sich auch gewundert als es nicht ging. Und nun sollen wir zuhause versuchen das Problem zu lösen...
|
Dein Tipp mit:
Delphi-Quellcode:
hilft mir auch nicht weiter.
Inc(el);
until el>er; ich bin aber auf eine andere Idee gekommen. Es müsste doch eigentlich wie folgt sein:
Delphi-Quellcode:
Es funktioniert auch, fast zumindest. Wenn ich z.B. eine Liste mit 12 Zahlen nehme sind fast alle richtig sortiert. Meistens sind so ca. 10 von 12 Zahlen richtig sortiert. Aber warum werden nicht alle sortiert? :?: :?: :?: :!: :(
el:=el+1;
er:=er-1; until el>er; |
Zitat:
Delphi-Quellcode:
und
Inc(el)
Delphi-Quellcode:
macht??
Dec(er)
Inc zählt die Varibale hoch, ist also das gleiche wie i := i +1; und Dec macht genau das Gegenteil, es zählt runter! Grüsse, Daniel :hi: |
Ok, aber was kann ich nun mache, damit die Liste komplett sortiert wird. Damit die Liste komplett richtig sortiert wird muss ich das Verfahren mehrmals hintereinander anwenden...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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