![]() |
Sortieralgo
Juhuu.
Ich wollt son eigenen kleinen (wahrscheinlich auch seeehr langsamen) Sortieralgo machen und wollt mal fragen warum ich bei diesem Code den Fehler Access Violation at Adress 00000000 oder auch mal 000000018 bekomme
Delphi-Quellcode:
var
sl: TStringList; i, i2: Integer; smallest: String; begin sl := TStringList.Create; i := ListBox1.Items.Count - 1; Repeat smallest := ListBox1.Items.Strings[0]; For i2 := 0 to i - 1 do begin if ListBox1.Items.Strings[i2 + 1] < smallest then smallest := ListBox1.Items.Strings[i2 + 1]; end; i := i - 1; sl.Add(smallest); Until i = 1; ListBox1.Items.Free; For i := 0 to sl.Count - 1 do ListBox1.Items.Add(sl.Strings[i]); |
Re: Sortieralgo
Ich tippe deswegen :
Delphi-Quellcode:
Müsste so aussehen:
ListBox1.Items.Free;
For i := 0 to sl.Count - 1 do ListBox1.Items.Add(sl.Strings[i]);
Delphi-Quellcode:
Wieso willst du die Items freigeben, wenn du sie vorher mit Werten gefühlt hast, ohne sie zu benutzen ? :gruebel:
For i := 0 to sl.Count - 1 do
ListBox1.Items.Add(sl.Strings[i]); ListBox1.Items.Free; // diese Zeiele verstehe ich nicht ganz ??? |
Re: Sortieralgo
Einer der schlechtesten Sortieralgorithmen ist BogoSort.
Wenn man es mit Spielkarten erklaert dann geht es so: 1. Schmeiss die Karten auf den Boden. 2. Heb sie auf und pruefe ob sie sortiert sind. 3. Wenn nicht dann zurueck zu 1. Bei diesem Algorithmus ist nicht einmal die Termination gesichert. |
Re: Sortieralgo
Hi,
bei Delphi die Thread-Demo hat doch auch 3 verschiedene Sortieralgos oder? Ist davon keiner für deine zwecke brauchbar? Greetz Boombuler |
Re: Sortieralgo
Delphi-Quellcode:
Du entfernst das Objekt Items aus dem Speicher.
var
sl: TStringList; i, i2: Integer; smallest: String; begin sl := TStringList.Create; i := ListBox1.Items.Count - 1; Repeat smallest := ListBox1.Items.Strings[0]; For i2 := 0 to i - 1 do begin if ListBox1.Items.Strings[i2 + 1] < smallest then smallest := ListBox1.Items.Strings[i2 + 1]; end; i := i - 1; sl.Add(smallest); Until i = 1;
Delphi-Quellcode:
Und willst hier wieder auf Items zugreifen, das Objekt ist aber von Dir aus dem Speicher entfernt worden.
ListBox1.Items.Free;
Delphi-Quellcode:
Falls Du Items nur leeren möchtest (also nur den Inhalt):
For i := 0 to sl.Count - 1 do
ListBox1.Items.Add(sl.Strings[i]);
Delphi-Quellcode:
...
ListBox1.Items.Clear; ... |
Re: Sortieralgo
Jo klappt. Ich dachte das löscht einfach alle.
Aber 1.Das Ding is kackenlangsam. 2.Es sortiert nicht wirklich richtig und es sind 1000 fehler drin. Muss ich wohl nochma guggn. |
Re: Sortieralgo
Selection Sort ist nicht schnell aber für kleinere Listen sehr geignet.
Hier:
Delphi-Quellcode:
procedure SelectionSort( Was : TStrings);
var i,j:integer; temp : string; begin if Was.Count >0 then begin for i:=0 to Was.Count-1 do for j:=i to Was.Count-1 do if Was.Strings[i] > Was.Strings[j] then begin temp := Was.Strings[i]; Was.Strings[i] := Was.Strings[j]; Was.Strings[j] := temp; end; end; end; procedure TForm1.FormCreate(Sender: TObject); var a:integer; begin Randomize; for a:=0 to 30 do ListBox1.Items.Add(inttostr(random(10000))); end; procedure TForm1.Button1Click(Sender: TObject); begin SelectionSort(ListBox1.Items); end; |
Re: Sortieralgo
könnte das mal einer ausführlich kommentieren?
|
Re: Sortieralgo
Zitat:
Es gibt doch ein gutes Tutorial zum Thema Sortieren: ![]() Viel Spaß beim lesen |
Re: Sortieralgo
Ich glaube ListBox1.Items.Free sollte man unter keinen umständen machen. Items wird ja von der ListBox verwaltet und diese dann einfach freigeben ...
Um alle einträge zu löschen, mach lieber ein Clear. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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