Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sortieralgo (https://www.delphipraxis.net/41334-sortieralgo.html)

Rastaman 1. Mär 2005 21:39


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]);

sniper_w 1. Mär 2005 22:00

Re: Sortieralgo
 
Ich tippe deswegen :
Delphi-Quellcode:
ListBox1.Items.Free;
  For i := 0 to sl.Count - 1 do
    ListBox1.Items.Add(sl.Strings[i]);
Müsste so aussehen:
Delphi-Quellcode:
  For i := 0 to sl.Count - 1 do
    ListBox1.Items.Add(sl.Strings[i]);
 ListBox1.Items.Free; // diese Zeiele verstehe ich nicht ganz ???
Wieso willst du die Items freigeben, wenn du sie vorher mit Werten gefühlt hast, ohne sie zu benutzen ? :gruebel:

Robert Marquardt 2. Mär 2005 05:17

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.

Boombuler 2. Mär 2005 07:42

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

MaBuSE 2. Mär 2005 08:10

Re: Sortieralgo
 
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;
Du entfernst das Objekt Items aus dem Speicher.
Delphi-Quellcode:
  ListBox1.Items.Free;
Und willst hier wieder auf Items zugreifen, das Objekt ist aber von Dir aus dem Speicher entfernt worden.
Delphi-Quellcode:
  For i := 0 to sl.Count - 1 do
    ListBox1.Items.Add(sl.Strings[i]);
Falls Du Items nur leeren möchtest (also nur den Inhalt):
Delphi-Quellcode:
...
  ListBox1.Items.Clear;
...

Rastaman 2. Mär 2005 13:14

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.

sniper_w 2. Mär 2005 13:44

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;

Rastaman 2. Mär 2005 14:11

Re: Sortieralgo
 
könnte das mal einer ausführlich kommentieren?

MaBuSE 2. Mär 2005 15:03

Re: Sortieralgo
 
Zitat:

Zitat von Gerrit89
könnte das mal einer ausführlich kommentieren?

Warum?
Es gibt doch ein gutes Tutorial zum Thema Sortieren:
http://www.delphipraxis.net/internal_redirect.php?t=344

Viel Spaß beim lesen

jim_raynor 2. Mär 2005 16:40

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 20:30 Uhr.
Seite 1 von 2  1 2      

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